double을 매개 변수로 받아 int를 반환하는 함수를 선언
세 문장은 모두 동일한 동작
int f(double d);
int f(double (d)); // d의 괄호는 불필요한 것이므로 컴파일러가 무시
int f(double);
매개변수로 함수 포인터를 받는 함수 선언
세 문장은 모두 동일한 동작
매개변수를 둘러싼 괄호는 무시되어도 무방하지만 세 번째 문장 매개변수의 괄호는 함수의 매개변수 리스트가 있음을 나타내는 것으로 함수의 포인터임을 알림
int g(double (*pf)());
int g(double pf());
int g(double ());
아래 코드는 컴파일이 되지만 런타임에 데이터를 전혀 읽지 않고 리스트도 만들어지지 않음
두 번째 문장에서 list를 선언하지도 않았고 생성자를 호출하지도 않았고 list<int>를 반환하는 data 함수를 선언한 것
첫 번째 매개변수는 타입은 istream_iterator<int>이고 이름은 dataFile
두 번째 매개변수는 매개변수를 받지 않고, istream_iterator<int>를 반환하고 이름 없는 함수 포인터
ifstream dataFile("ints.dat");
list<int> data(istream_iterator<int>(dataFile), istream_iterator<int>());
해결방법으로는 {}를 사용하여 유니폼 초기화로 객체 생성
list<int> data{istream_iterator<int>(dataFile)), istream_iterator<int>()};
'C++ > Effective STL' 카테고리의 다른 글
Effective STL 항목 9 데이터를 삭제할 때에도 조심스럽게 선택할 것이 많다 (0) | 2024.12.19 |
---|---|
Effective STL 항목 7 new로 생성한 포인터의 컨테이너를 사용할 때에는 컨테이너가 소멸되기 전에 포인터를 delete하는 일을 잊지 말자 (0) | 2024.12.18 |
Effective STL 항목 5 단일 요소를 단위로 동작하는 멤버 함수보다 요소의 범위를 단위로 동작하는 멤버 함수가 더 낫다 (0) | 2024.12.16 |
Effective STL 항목 3 복사는 컨테이너 안의 객체에 맞게 비용은 최소화하며, 동작은 정확하게 하자 (0) | 2024.12.15 |
Effective STL 항목 2 컨테이너에 독립적인 코드라는 환상을 조심하자 (0) | 2024.12.10 |