목록C++ (11)
Pure Software Engineer :)
References https://code.facebook.com/posts/1661982097368498 http://www.infoq.com/news/2015/07/facebook-folly-futures
The literal 0 is an int, not a pointer. // three overloads of f void f (int); void f (bool); void f (void *); f(0); // call f(int), not f(void *) f(NULL); // might not compile, but typically calls f(int). Never calls f(void*) This counterintuitive is what led to the guideline for C++98 programmers to avoid overloading on pointer and integral types. That guideline remains valid in C++11, because,..
int x(0); // initializer is in parentheses int y = 0; // initializer follows "=" int z{0}; // initializer is in braces The use of an equals sign for initialization often misleads C++ newbies into thinking that an assignment is taking place, even though it's not. Widget w1; // call default constructor Widget w2 = w1; // not an assignment; calls copy ctor Widget w1 = w2; // an assignment; calls co..
C++은 이제 더이상 예전의 C++이 아니다. C++11 표준이 발표되고 C++14도 곧 나올것같은 상황에서 계속 공부를 하지 않으면 이게 C++ 코드나 맞나? 싶을 정도로 새롭게 변화하고 있다 Effective C++에 이어 C++11, C++14를 위한 Effective Modern C++이 최근 출간되었다. 우선 항목부터 정리해보고 조금씩 읽어 보자. 1. Deducing Types Item 1: Understanding template type deduction Item 2: Understanding auto type deduction Item 3: Understanding decltype Item 4: Know how to view deduced types 2. auto Item 5: Prefe..
C++의 다형성(polymorphism)은 객체의 동작방식을 런타임(runtime)에 결정하도록 한다. 예를들어, Animal 클래스에 move() 함수가 있다면, 물고기는 헤엄, 강아지는 달리기, 새는 날아서 움직일 것이다. 이와 같은 실제 동물에 따른 행위가 컴파일시점에 결정하는것이 아니라 실행시간에 결정할 수 있다는것이 다형성의 개념이다. 하지만, 경우에 따라서 런타임때 두가지 이상의 타입에 따라 함수의 동작방식이 선택되야 할 경우가 있다. 예를들면, Animal 클래스에 어떤 동물이 다른 동물을 먹을수 있는지 반환하는 eats() 함수가 있다고 하자. 이때는 먹는동물과 먹히는 동물에 따라 eats의 결과가 달라져야 할 것이다. C++에서 언어차원에서 두개 이상의 타입을 런타임에 결정할수있는 방법을..
코드를 작성하다보면 bool 타입을 써야할 때가 종종 있다. 1바이트를 사용하고, 그 변수의 이름과 맞물려서 true/false를 잘 표현해낸다면 딱일 것이다. 최근 코드를 보다가 아래와 같은 코드를 본적이 있다. 1 2 3 4 5 //=========================================================================== void CStsRouteConn::OnRouteRegisterFinished (bool result) { ... ... } (주관적일지 모르겠지만)저기서 result를 사용하는것은 좋은 코드같아 보이지는 않는다. 함수 이름으로 봤을때 뭔가 하는 작업이 끝났을때 callback되는것 같고, result는 작업이 성공했는지, 실패했는지를 나..
C++카테고리 이지만 C내용도 끼어서 써보자. 회사에서 C++ 를 사용해서 개발을 하고 있다. 그런데 구조체를 사용하는데 있어서 다음과 같은 형태로 사용하고 있었다. 1 2 3 4 5 6 7 8 9 10 11 12 struct Samle { int a; int b; }; int main () { Sample s1; ... return 0; } 아무생각도 없이 이런식으로 쓰고 있었는데, 문득 C언어에서는 typedef을 하지 않으면 아래와 같이 struct 키워드를 붙여서 사용해야만 했다는것이 기억이 났다. 1 2 3 4 5 6 7 8 9 10 11 12 struct Samle { int a; int b; }; int main () { struct Sample s1; ... return 0; } 찾아본 결..
C++은 개발자가 클래스에 직접 넣지 않더라도 자동으로 생성하는 함수들이 있다. 그것들은 바로 1. 복사 생성자(copy constructor) 2. 복사 대입 연산자(copy assignment operator) 3. 소멸자(destructor) 위의 3가지에 더하여, 어떠한 생성자도 선언되지 있지 않으면 다음도 생성한다. 4. 기본 생성자 위 1~4가지의 공통점은 모두 public 멤버라는 것과 inline 함수라는 것이다. 즉, 다음 두 코드 블럭은 동일하다. 1 class Empty {}; 1 2 3 4 5 6 7 8 9 class Empty { public: Empty () { ... } Empty (const Empty & rhs) { ... } ~Empty () { ... } Empty & ..