以下(玩具)程序在与 libstdc++ 和 libc++ 链接时返回不同的内容。这是 libc++ 中的错误还是我不明白 istream eof() 的工作原理?我尝试在 linux 和 mac os x 上使用 g++ 并在 mac os x 上使用 clang 运行它,有和没有 -std=c++0x。我的印象是 eof() 在尝试读取(通过 get() 或其他方式)实际上失败之前不会返回 true。这是 libstdc++ 的行为方式,但不是 libc++ 的行为方式。
#include <iostream>
#include <sstream>
int main() {
std::stringstream s;
s << "a";
std::cout << "EOF? " << (s.eof() ? "T" : "F") << std::endl;
std::cout << "get: " << s.get() << std::endl;
std::cout << "EOF? " << (s.eof() ? "T" : "F") << std::endl;
return 0;
}
Thor:~$ g++ test.cpp
Thor:~$ ./a.out
EOF? F
get: 97
EOF? F
Thor:~$ clang++ -std=c++0x -stdlib=libstdc++ test.cpp
Thor:~$ ./a.out
EOF? F
get: 97
EOF? F
Thor:~$ clang++ -std=c++0x -stdlib=libc++ test.cpp
Thor:~$ ./a.out
EOF? F
get: 97
EOF? T
Thor:~$ clang++ -stdlib=libc++ test.cpp
Thor:~$ ./a.out
EOF? F
get: 97
EOF? T