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>()};

+ Recent posts

목차