期待される文字列を"Bar"
として出力するのではなく、次のコードはポインタと思われるものを出力します。Stringstream出力ポインタの出力
#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