목록Software Engineering/Programming (18)
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는 작업이 성공했는지, 실패했는지를 나..
Refactoring - written by by Martin Fowler 프로그래머라면 반드시 읽어봐야 할 책중에 하나인 리팩토링에 관한 책. 리팩토링에 대한 개념부터 시작해서 코드예제까지 조금씩 읽으면서 정리를 해보자. 오늘은 그 시작!! 리팩토링이란? - 외부 동작을 바꾸지 않으면서 내부 구조를 개선하는 방법 - 소프트웨어 시스템을 변경하는 프로세스 - 버그가 끼어 들 가능성을 최소화 - 코드를 정리하는 정형화된 방법 그렇다면 리팩토링은 반대는? 퍼포먼스 최적화! 퍼포먼스 최적화란? - 리팩토링과 마찬가지로 소프트웨어의 동작을 바꾸지는 않음 - 하지만, 리팩토링과 달리 종종 코드를 이해하기 더 어렵게 만듦 - 이것은 필요한 퍼포먼스를 얻기 위해서는 감수해내야 하는 것 리팩토링을 할때 두 가지 구별된..
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; } 찾아본 결..