2024/11/03 3

[Effective Modern C++] 항목 7~17 : 현대적 C++

항목 7: 객체 생성 시 ()와 {}를 구분하자.객체 생성 방법1. int x(0);2. int x = 0;3. int x{0};4. int x = {0}; //3과 사실상 동일하기에 3으로 통일하여 설명함. 중괄호 초기화가 소괄호 초기화보다 좋은점1. 모든 초기화 상황에 적용가능함.//비정적 자료 멤버 기본 초기화Class Widget { int x(0); // 에러 int y = 0; // 가능 int z{0}; // 가능}//복사할 수 없는 객체 초기화 (항목 40)std::atomic x(0); // 가능std::atomic y = 0; // 에러std::atomic z{0}; // 가능 2. 좁히기 변환 방지double x,y,z;...int sum1{x+y+z} // double의 합을 int..

[Effective Modern C++] 항목 5~6 : auto

항목 5: 명시적 선언보다 auto를 선호하자.근거1. 긴 타입 타자치기 편함.2. 초기값이 꼭 필요해 초기화 안 까먹음.3. 람다같이 꼭 써야하는 경우가 있음.4. 람다의 경우 std::function을 대신 쓸수도 있지만 메모리가 더 들수있기에 auto가 낫다.5. std::vector::size()의 타입은 size_type인데 윈도우 비트마다 크기가 다르다. 이걸 그냥 unsigned에 담아쓰면 윈도우마다 다른 결과 나올 수 있다. auto쓰면 괜찮음.std::vector v;unsigned sz = v.size() // 윈도우마다 다르게 작동할 수 있음.auto sz = v.size() // good6. map을 아래와 같이 순회하면 tmp 복사본 만들고 그걸 참조함. 성능 안좋음. 이런 실수 ..

[Effective Modern C++] 항목 1~4 : 형식 영역

항목1 : 템플릿 형식 연역형식 연역이란 템플릿, auto등에서 컴파일러가 특정 타입을 유츄해내는 것을 이야기한다. c++은 템플릿, auto, decltype에서 형식 연역이 발생한다. 템플릿의 형식 연역 규칙은 다음과 같다.templatevoid f(T param)//const, 레퍼런스, volatile전부 무시됨.int x = 1;const int cx = 1;const int& rx = x; //세가지 모두 T -> intint* px = &x; // T -> int*const int* px = &x; // T -> const int*const int* const px = &x; // T -> const int*//포인터의 경우 포인터 변수 자체에 대한 const성만 사라짐.templatevoi..