중복 적재2 보편 참조에 대한 중복적재를 피하라 // 사람 이름 하나를 매개변수로 받고, 현재 날짜와 시간을 기록하여 전역 자료구조에 추가하는 예제 std::multiset names;// 전역 자료구조 void logAndAdd(const std::string& name) { auto now = std::chrono::system_clock::now();// 현재 시간을 얻고 log(now, "logAndAdd");// 로그에 기록 names.emplace(name);// 이름을 전역 자료구조에 추가 } std::string petName("Darla"); logAndAdd(petName);// 왼값 std::string을 넘겨줌 logAndAdd(std::string("Persephone"));// 오른값 std::string을 넘겨줌 logAnd.. 2020. 7. 21. 0과 NULL 보다 nullptr 리터럴 0은 int이며 포인터가 아니다. 또한 NULL도 포인터 형식이 아니다. C++98에서 0이나 NULL로 중복 적재 함수를 호출했을 때, 포인터를 받는 중복적재가 호출되는 일은 없다. void f(int); void f(bool); void f(void*); f(0);// f(void*)가 아닌 f(int) 호출 f(NULL);// 컴파일 되지 않을 수도 있지만, 보통은 f(int)호출 f(NULL)의 행동에 관련된 불확실성은 NULL의ㅏ 구체적인 형식을 구현의 재량에 맡긴 결과이다. 여기서 주목할 점은, 소스 코드의 외관상 의미(NULL, 즉 널 포인터로 f를 호출한다)와 실제 의미(널 포인터가 아닌 어떤 정수로 f를 호출한다)가 서로 모순된다는 것이다. nullptr의 장점은 정수 형식이 아니.. 2020. 6. 30. 이전 1 다음