我有两个代码片段:
这不会编译:
std::string reverseSentence(std::string sentence) {
std::stringstream stream = sentence;
}
这样做:
std::stringstream stream (sentence);
我的理解T foo = expr
是这样的T foo(expr)
。因此,这两个字符串流初始化不是等效的吗?为什么一个编译而另一个不编译?
我有两个代码片段:
这不会编译:
std::string reverseSentence(std::string sentence) {
std::stringstream stream = sentence;
}
这样做:
std::stringstream stream (sentence);
我的理解T foo = expr
是这样的T foo(expr)
。因此,这两个字符串流初始化不是等效的吗?为什么一个编译而另一个不编译?
取的构造函数std::basic_stringstream
std::string
标记为explicit
,复制初始化中不考虑std::stringstream stream = sentence;
。
std::stringstream stream (sentence);
是直接初始化,它也考虑explicit
构造函数。
直接初始化比复制初始化更宽松:复制初始化只考虑非显式构造函数和非显式用户定义转换函数,而直接初始化考虑所有构造函数和所有用户定义转换函数。