这两种初始化方法的区别

Difference between these 2 initialization methods

假设我这里有一个 class:

class Test
{
    Test(int x, const char* y)
    {
        // Do something
    }
}

我想初始化它。我有两种方法:

Test test(100, "hello world!");

Test test = Test(100, "hello 2nd method!");

两者之间有什么区别,哪个更好(如更快)

我看到了这个问题here,但它是为了隐式转换对象。

视情况而定。

在旧的编译器中,语句 Test test = Test(100, "hello 2nd method!"); 将首先使用您的 转换构造函数 [=27= 创建一个 临时 Test 对象],然后将使用 复制构造函数 创建 test 对象来制作该临时对象的副本。

在现代编译器中,这两个语句没有任何区别。编译器优化了临时文件(参见 Copy Elision),因此语句 Test test = Test(100, "hello 2nd method!"); 与语句 Test test(100, "hello world!"); 执行 完全相同的操作。没有创建临时文件了。