这两种初始化方法的区别
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!");
执行 完全相同的操作。没有创建临时文件了。
假设我这里有一个 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!");
执行 完全相同的操作。没有创建临时文件了。