1

我有两个代码片段:

这不会编译:


std::string reverseSentence(std::string sentence) {
    std::stringstream stream = sentence;
}

这样做:

std::stringstream stream (sentence);

我的理解T foo = expr是这样的T foo(expr)。因此,这两个字符串流初始化不是等效的吗?为什么一个编译而另一个不编译?

4

1 回答 1

4

取的构造函数std::basic_stringstreamstd::string标记为explicit复制初始化中不考虑std::stringstream stream = sentence;

std::stringstream stream (sentence);直接初始化,它也考虑explicit构造函数。

直接初始化比复制初始化更宽松:复制初始化只考虑非显式构造函数和非显式用户定义转换函数,而直接初始化考虑所有构造函数和所有用户定义转换函数。

于 2020-06-07T02:03:12.310 回答