C++에는 int같은 data type 말고도 복잡한 계산과 코드를 우아하게 해결해주는 여러가지 복합 유형 compound type이 있다. 일단 그 중 하나인 l-value와 r-value에 대해 먼저 알아보자. lvalue는 식별 가능한 개체나 함수로 평가되는 표현식이다. (내 신원을 확인할 수 있는 Identify한 걸로 자신이 ID를 가졌다고 이해함) int main() { int x{}; const double d{}; int y { x }; // x is a modifiable lvalue expression const double e { d }; // d is a non-modifiable lvalue expression return 0; } lvalue는 수정가능한 lvalue, const..
함수 오버로드를 사용 하면 동일한 이름을 가진 함수를 여러개 만들 수 있다. 대신 동일한 이름의 함수가 서로 다른 매개변수 타입을 가져야 한다.(또는 함수를 다르게 구별할 수 있는 경우. 그냥 컴파일러가 구별만 할 수 있으면 됨) 동일한 범위 내에서 이름을 공유하는 각 함수를 오버로드된 함수 라고 한다. (그냥 오버로드라 부르기도 함) 우리는 이러한 오버로드를 사용으로 기억해야 하는 함수 이름의 수를 줄임으로서 프로그램의 복잡함을 줄일 수 있다. int add(int x, int y) // integer version { return x + y; } double add(double x, double y) // floating point version { return x + y; } int main() {..
C++는 광범위한 아키텍처에서 이식 가능하고 성능이 뛰어나도록 설계되었기 때문에언어 설계자는 특정 CPU가 우리가 사용하는 CPU의 자연 데이터 크기보다 좁은(작은 크기. 앞으로는 비트의 수, 너비로 표현) 값을 효율적으로 조작할 수 있다고 생각하지 않았다. 그래서 C++은 numeric promotion (숫자 승격)을 지원한다. 이것은 특정 좁은 숫자 타입을 효율적으로 처리할 수 있고, 오버플로 가능성이 적은 더 넓은 숫자 타입으로 변환하는 것이다. 승격이 된다고 해서 값이 변하는 것은 아니다. 변환된 값은 항상 source값과 동일하여 보존된다. 그냥 타입만 달라질 뿐이다. 이러한 숫자 승격 규칙은 integral promotions및 floating point promotions 의 두 가지 하위..
소프트웨어가 실제로 예상대로 작동하는지 여부를 결정하는 프로세스를 흔히 소프트웨어 테스트(검증)라고 한다.살짝 먼저 보니까 디버그를 공부했던 내용과 비슷한것 같다.https://guhonga.tistory.com/51 디버깅 전략과 통합 디버거 사용이 주제를 공부하는 것으로 복잡한 프로그램에도 문제를 진단하고 해결하는 능력이 향상되기를.. 디버깅이 필요할 때 오류는 일반적으로 구문 오류와 의미 오류(논리 오류)라는 두 가지 범주guhonga.tistory.com 단위 테스트프로그램을 작은 조각으로 테스트하는 것이다.작은 함수나 클래스를 작성할 때 마다 즉시 컴파일하고 테스트하는 방식으로 생각하자. 그러면 마지막 테스트 이후 변경해야 할 점이 적어진다. 이렇게 코드의 "단위"가 올바른지 확인하기 위해..
switch문의 fallthrough우리는 지금까지 switch문에서 case label을 쓰고 (항상 정수여야만 함. 컴파일러 최적화로 설계되었기 때문)구문 뒤에 return 혹은 break를 사용해왔다. 그런데 만약 return이나 break문 없이 코드를 짜면, case와 매칭된 문장 부터 순차적으로 아래로 쭉 전부 실행된다.이러한 경우를 fallthrough(오버플로) 라고 한다. 의도적으로 코드를 통해 fallthrough를 언급하는 것은 다른 개발자에게 이런 경우가 의도되었음을 알리는 규칙이다.개발자는 의도를 알아차리지만 컴파일러와 코드 분석 도구는 이런 상황에서 프로그래머에게 경고한다.이 문제를 해결하기 위해 C++17에서는 [[fallthrough]]속성 이라는 기능을 제공한다.여기서 ..
미리 말하지만 코드 예시때문에 좀 길어보일 뿐 별로 많지 않다. 부담갖지 말고 다시 볼 때 슥슥 넘겨보자.. namespace 소개두 개의 동일한 식별자가 동일한 범위에 도입되면 이름 지정 충돌이 발생하며 컴파일러는 어느 식별자를 사용할지 명확하게 구분할 수 없다. 이 때 컴파일러나 링커는 모호성을 해결하기에 충분한 정보가 없기 때문에 오류를 생성한다. 이러한 범위 문제를 해결하고자 C++에서는 namespace 키워드를 통해 자체 네임스페이스를 정의할 수 있다. 자신의 프로그램에서 생성한 네임스페이스는 일반적으로 사용자 정의 네임스페이스 라고 한다.네임스페이스 네임스페이스식별자{ // 여기에 네임스페이스 내용이 있음} 네임스페이스는 전역 범위나 다른 네임스페이스 내부에서 정의된다. 하지만 ..