4

Visual Studio 2013 でコンパイル エラーが発生し (Xcode 6.2 のコンパイル中)、意味がわかりません:

次のコード例は、フォーマット変換から抜粋した要約です。

#include<sstream>
void main(...){
    (std::ostringstream()<<0).str();
}

次のバージョンのコンパイル中:

#include<sstream>
void main(...){
    (std::ostringstream()).str();
}

環境:

std::string result=(std::ostringstream()<<value).str(); 

ここで何が恋しいですか?ありがとう!

4

2 に答える 2

5

エラー メッセージは次のとおりですerror C2039: 'str': is not a member of 'std::basic_ostream<char,std::char_traits<char>>'。ではなくakaにstr欠けていると不平を言っています。std::basic_ostream<char,std::char_traits<char>>std::ostreamstd::ostringstream

std::ostringstreamoperator<<はまだ戻ります(これらのstd::ostream&演算子は から継承されます) 。メンバーstd::ostreamはありません。str()

Clang/libc++ (Xcode が使用するもの) は、右辺値ストリーム挿入演算子に拡張機能を実装します。

  1. 継承されたメンバーoperator<<sと比較して、右辺値ストリームにより適したものにします。
  2. に変換せずに、ストリームへの参照をそのまま返しますstd::ostream&

これにより、コードが Xcode でコンパイルされます。

を呼び出す.str()には、手動でstatic_cast (std::ostringstream()<<value)戻ることができます (右辺値ストリーム挿入演算子はストリームへの右辺値参照を返すため、libc++ との互換性のためにまたはをstd::ostringstream&使用します)。std::ostringstream &&const std::ostringstream&

于 2015-04-20T10:01:10.837 に答える
0
于 2015-04-20T10:12:45.003 に答える