而不是輸出期望的字符串"Bar"
,下面的代碼輸出看起來是指針的東西。打印字符串流輸出指針
#include <sstream>
#include <iostream>
int main()
{
std::stringstream Foo("Bar");
std::cout << Foo << std::endl; // Outputs "0x22fe80."
return 0;
}
這可以通過周圍使用Foo.str()
來的工作,但它引起了我一些問題,在過去。什麼導致這種奇怪的行爲?它在哪裏記錄?
既然這已經回答了,我不妨把這個地址的意思,以防萬一你好奇。通常,爲了允許流在布爾上下文中被測試,運算符void *被重載,這會導致(在一些實現中)像'operator void *()const {return(fail()?0:(void *)this)這樣的代碼。 }(如果沒有設置失敗標誌)將返回對象本身的地址。在一些實現中,這意味着該類的成員或虛擬表指針的地址,至少在vC++中它似乎對後者進行操作。 – lccarrasco