此代码工作原理:
std::ifstream f(mapFilename.c_str());
std::string s = std::string(std::istreambuf_iterator(f), std::istreambuf_iterator());
ParseGameState(s);
其中mapFilename是一个std :: string和void ParseGameState(const std :: string&);.
这不是:
std::ifstream f(mapFilename.c_str());
std::string s(std::istreambuf_iterator(f), std::istreambuf_iterator());
ParseGameState(s);
这是错误:
game.cpp: In member function ‘int Game::LoadMapFromFile(const std::string&)’:
game.cpp:423: error: no matching function for call to ‘ParseGameState(std::string (&)(std::istreambuf_iterator >, std::istreambuf_iterator > (*)()))’
game.cpp:363: note: candidates are: ParseGameState(const std::string&)
因此,在这种情况下,它似乎将s识别为函数声明,而不是变量声明.
这是为什么?这是GCC 4.2.1(Apple build)中的一个bug吗?或者GCC是否正确处理?这是否在C标准中定义?