나는 에서 가장 까다로운 구문 분석에 대한 항목 6을 찾고 있습니다. 효과적인 STL : Scott Meyers의 표준 템플릿 라이브러리의 개선을위한 50 가지 구체적인 방법.STL 스코틀러 마이어에서 난해한 구문 분석
(자신의 트위스트 방식으로) 재미 모두ifstream dataFile("ints.dat");
list<int> data(istream_iterator<int>(dataFile), // warning! this doesn't do
istream_iterator<int>()); // what you think it does
,하지만 우리가리스트 객체가 파일의 내용으로 초기화되어야한다는 인 말하고 싶은 무슨 말을 도움이되지 않습니다. 우리가 파싱해야 할 내용을 알았으니 표현하기 쉽습니다. 형식적인 매개 변수 선언을 괄호로 묶는 것은 합법적이지 않습니다. 그러나 괄호로 함수 호출에 인수를 돌리는 것은 합당합니다. 따라서 괄호 쌍을 추가하여 컴파일러가 어떤 식 으로든 내용을 볼 수있게 만듭니다.
list<int> data((istream_iterator<int>(dataFile)), // note new parens
istream_iterator<int>0); // around first argument
// to list's constructor
내 질문은 다음과 같은 진술로 작성자는 무엇을 의미합니까? "그것은 괄호 형식 매개 변수 선언을 둘러싸고 법적 아니지만, 괄호와 함수 호출에 인수를 둘러싸고 법적는"
감사
그 책은 다소 오래되었습니다. 요즘에는 유니폼 초기화를 사용하여 해당 구문 분석을 무력화합니다. – StoryTeller
'int foo ((int a))'를 할 수 없습니다. 그러나 당신은 int foo (((42))))'를 할 수있다. – Jarod42