下面的(玩具)程序在鏈接到libstdC++和libC++時返回不同的東西。這是libC++中的錯誤還是我不明白istream eof()的工作原理?我已經嘗試在Linux和Mac OS X上使用g ++運行它,在mac os x上使用和不使用-std = C++ 0x。我的印象是,直到試圖讀取(通過get()或其他)實際上失敗後,eof()纔會返回true。這是libstdC++的行爲方式,但不是libC++的行爲方式。istream eof libC++和libstdC++之間的差異
#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
我應該早點檢查其他答案! – Cubbi