목록C++/고성능을 위한 언어 C++ (3)
방프리
1. 포인터에 대한 const 전파const 정확성에서 가장 실수가 많은 것은 const로 초기화된 객체가 멤버 포인터가 가리키는 값을 변경하는 것namespace exp = std::experimetal;class Foo{public: auto set_ptr(int* p) const { ptr_ = p; // not compiled } auto set_val(int v) const { val_ = v; // not compiled } auto set_ptr_val(int v) const { *ptr_ = v; // not compiled } private: exp::propagate_const ptr_ = ..
1. C 함수 포인터를 람다에 할당람단는 일반 함수 포인터로 변환이 가능, 해당 기능 때문에 람다는 캡쳐를 전혀 가질 수 없음 // old C library codeexternal void download_webpage( const char* url, void (*callback)(int, const char*)); auto func() { auto lambda = +[](int result, const char* str) {}; download_webpage("http://www.packet.com", lambda); } 2. 람다와 std::function모든 람다 함수는 자신만의 타입을 가지고 있으며, 동일한 두 개의 람다가 동일한 서명을 가지고 있어도 마찬가지다.std..
1. 변수에서의 auto 사용auto는 지역 변수에 대해 좌에서 우로 초기화하는 방식으로 사용하는 것을 선호 ex) auto i = 0;이동 불가능한 유형이나 복사 불가능한 유형에도 적용 가능2. const 참조const auto&와 같이 나타나는 const 참조는 어느 것과도 바인드가 가능const 참조는 수정을 원하지 않는 변수에 대한 기본적인 선택이어야 함auto func() { auto foo = Foo {}; auto& cref = foo.cref(); // cref는 const 참조 auto& mref = foo.mref(); // mref는 변경 가능한 참조}3. 가변 참조const 참조와 반대로 임시 객체와 바인드가 되지 않음auto&는 가변 참조를 표시하여 사용4. 전달 ..