【发布时间】:2020-06-04 03:15:51
【问题描述】:
为什么是这种初始化 std::string 的方式:
std::string s = "123";
当没有实际发生任何复制时,是否认为是复制初始化?
在上面的例子中,编译器可以清楚地看到有一个std::string构造函数接受char const *,因此这里发生的是通过@的隐式转换构造一个std::string对象987654325@ 至std::string。这是一个如此明确的场景。它只是简单地调用std::string(const char *) 构造函数一次,简单明了。如此简单,对于复制省略和移动等优化,甚至没有什么可谈的。
现在,问题是,我从来没有对通过隐式转换(即类 a = 表达式)进行对象初始化有任何困惑,直到我开始遇到文献声明 = 的初始化是“复制初始化”。甚至主要人物 Bjarne Stroustrup 本人也将这种形式的初始化称为“复制初始化”。
在这一点上,我觉得我可能误会了什么。
那么,如果允许隐式转换显然不是这种情况,为什么 = 的初始化被认为是复制初始化?
【问题讨论】:
标签: c++