Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这两种初始化方法之间的区别_C++_Memory Management - Fatal编程技术网

C++ 这两种初始化方法之间的区别

C++ 这两种初始化方法之间的区别,c++,memory-management,C++,Memory Management,假设我在这里有一节课: class Test { Test(int x, const char* y) { // Do something } } 我想初始化它。我有两种方法: Test test(100, "hello world!"); 及 2和哪一个更好(如更快)之间有什么区别 我看到了这个问题,但它是用于隐式转换对象的。这取决于具体情况。 在旧的编译器中,语句testtest=Test(100,“Hello2ndmethod

假设我在这里有一节课:

class Test
{
    Test(int x, const char* y)
    {
        // Do something
    }
}
我想初始化它。我有两种方法:

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

2和哪一个更好(如更快)之间有什么区别

我看到了这个问题,但它是用于隐式转换对象的。

这取决于具体情况。 在旧的编译器中,语句
testtest=Test(100,“Hello2ndmethod!”)
将首先使用转换构造函数创建一个临时的
Test
对象,然后使用复制构造函数创建
Test
对象来复制该临时对象


在现代编译器中,这两个语句之间没有任何区别。编译器优化了临时方法(请参阅),因此语句
Test Test=Test(100,“Hello2ndmethod!”)
做的与语句
测试测试(100,“hello world!”)完全相同。不再创建临时文件。

但是您链接到的问题确实涵盖了这一点。这个问题也没有隐含的转换。非常感谢。我将坚持使用第一条语句,因为它的输入速度更快,而且可能更快
Test test = Test(100, "hello 2nd method!");