4

次のコードは、GCC、Clang、および Visual Studio で失敗します。

#include <string>
#include <sstream>

int main() {
    std::string s = "hello"; // ok, copy-initialization
    std::stringstream ss1(s); // ok, direct-initialization
    std::stringstream ss2 = s; // error
}

直接初期化が機能し、コピー初期化が機能しない唯一のケースは、コンストラクターが明示的である場合であると考えましたが、この場合はそうではありません。どうしたの?

4

1 に答える 1

7

そのコンストラクター明示的にマークされているため、直接初期化でのみ使用できます。§27.8.5:

explicit basic_stringstream(
ios_base::openmode which = ios_base::out | ios_base::in);

explicit basic_stringstream(
const basic_string<charT,traits,Allocator>& str,
ios_base::openmode which = ios_base::out | ios_base::in);

basic_stringstream(const basic_stringstream& rhs) = delete;

basic_stringstream(basic_stringstream&& rhs);

( basic_stringbufbasic_istringstream、についても同様ですbasic_ostringstream。)

于 2013-10-15T22:35:36.197 に答える