可能是重复问题:
为什么复制初始化和直接初始化的行为不同?
通过复制初始化,我指的是这样:
尽管我已经使用C++编程多年,但我从未意识到上述代码需要复制构造函数(感谢jogojapan)。该临时变量总是被省略掉的,因此我甚至不知道它的存在(至少在表面上,尽管它被优化了),直到有人指出这一点。
通过大量谷歌搜索,我知道了它的工作原理。我的问题是,为什么它是这个样子?
为什么标准没有将上述示例设计成不需要复制构造函数?是否有某些特定的情况或示例说明在此类型的初始化中需要复制构造函数?
如果没有一个合理的解释说明为什么会是这样,我只会把它看作是一个烦人的遗产,但如果有一些重要的东西我不知道,我宁愿不要无知。
struct MyStruct
{
MyStruct(int) {}
MyStruct(const MyStruct&) {}
};
MyStruct s = 5; // needs *both* the int and copy constructor
尽管我已经使用C++编程多年,但我从未意识到上述代码需要复制构造函数(感谢jogojapan)。该临时变量总是被省略掉的,因此我甚至不知道它的存在(至少在表面上,尽管它被优化了),直到有人指出这一点。
通过大量谷歌搜索,我知道了它的工作原理。我的问题是,为什么它是这个样子?
为什么标准没有将上述示例设计成不需要复制构造函数?是否有某些特定的情况或示例说明在此类型的初始化中需要复制构造函数?
如果没有一个合理的解释说明为什么会是这样,我只会把它看作是一个烦人的遗产,但如果有一些重要的东西我不知道,我宁愿不要无知。
MyStruct s = 5;
这样的语法(使用 =)是因为很多人习惯了它。 - Jesse GoodMyStruct s = 5;
实际上被转换为MyStruct s = MyStruct(5);
以将5
转换为MyStruct
”的解释结合起来,可以作为一个合理的解释。 - Cornstalks