可能重复:
复制和直接初始化行为不同的动机是什么?
通过复制初始化,我的意思是这样的:
struct MyStruct
{
MyStruct(int) {}
MyStruct(const MyStruct&) {}
};
MyStruct s = 5; // needs *both* the int and copy constructor
尽管使用 C++ 编程多年,但我从未意识到上面的代码需要复制构造函数(感谢 jogojapan)。临时性总是被忽略,因此我什至不知道它甚至存在(至少在表面上,尽管它被优化掉了),直到它被指出给我。
经过大量的谷歌搜索后,我明白了它是如何工作的。我的问题是为什么会这样?
为什么标准没有使上面的示例不需要复制构造函数?是否有一些特定的案例/示例表明在这种类型的初始化中需要复制构造函数很重要?
如果没有一个体面的解释为什么事情会这样,我只是认为这是一个令人讨厌的人工制品,但如果我遗漏了一些重要的东西,我宁愿不要无知。