C++ c++;对象初始化和构造函数语义
一个对象的两个初始化之间是否存在差异C++ c++;对象初始化和构造函数语义,c++,object,constructor,C++,Object,Constructor,一个对象的两个初始化之间是否存在差异 Object obj(constructor_arguments); 或 请注意,第二次初始化不是使用new运算符的指针。它是一个非堆变量 在GCC中,编译和工作都很好,我想知道这两个语句是否有任何区别,或者这两个语句在语义上是否相同。是的。第一个是直接初始化的语法,第二个是复制初始化 理论上,第二个调用复制构造函数,但这需要进行优化。查看是否存在实际差异的最佳方法是检查生成的汇编代码。第一个初始化更好,但是如果你让编译器发挥它的魔力,第二个版本可能会优化
Object obj(constructor_arguments);
或
请注意,第二次初始化不是使用new
运算符的指针。它是一个非堆变量
在GCC中,编译和工作都很好,我想知道这两个语句是否有任何区别,或者这两个语句在语义上是否相同。是的。第一个是直接初始化的语法,第二个是复制初始化
理论上,第二个调用复制构造函数,但这需要进行优化。查看是否存在实际差异的最佳方法是检查生成的汇编代码。第一个初始化更好,但是如果你让编译器发挥它的魔力,第二个版本可能会优化到同样的效果。可能重复@marclaesen,这意味着查看生成的代码不是最好的方法。事实上,这是最糟糕的方式(在这种情况下),因为它可能导致错误的结论。@LuchianGrigore,我明白你的观点,但我想说这取决于问题(在这方面是模糊的)。如果问题是“理论上哪个更有效”,答案肯定是前者。如果问题是“实践中哪一个更有效?”那么在优化后,它们很可能是等价的。
Object obj = Object(constructor_arguments);