我有两个代码段:
无法编译:
std::string reverseSentence(std::string sentence) {
std::stringstream stream = sentence;
}
这样做:
std::stringstream stream (sentence);
据我了解,T foo = expr
是T foo(expr)
。因此,两个stringstream初始化不相等吗?为什么一个编译而另一个不编译?
取constructor of std::basic_stringstream
的std::basic_stringstream
被标记为std::string
,在explicit
中不像copy initalization那样考虑。
[std::stringstream stream = sentence;
是std::stringstream stream (sentence);
,它也考虑direct initialization构造函数。
直接初始化比复制初始化更宽松:复制初始化只考虑非
explicit
构造函数和非明确的用户定义explicit,而直接初始化考虑所有构造函数和所有用户定义的转换函数。