这些构造函数之间有什么区别?

What's the difference between these constructors?

本文关键字:什么 区别 之间 构造函数      更新时间:2023-10-16

我想知道这两个构造函数之间有什么区别:

List<type*> list = List<type*>();

List<type*> list;

容器列表是由我编写的,并且具有不带参数的用户定义的构造函数。

在我看来,第一行是正确的,第二行看起来像Java。但是,两者都编译。那么,这两种说法有什么区别呢?

第一个需要可访问的副本或移动构造函数,而第二个不需要。

例如,考虑这个德蒙特斯拉特计划。如果您不使用MS VC++,则程序将无法编译:)

#include <iostream>
class A
{
public:    
    A() {}
private:    
    A( const A& ) { std::cout << "A( const A & )" << std::endl; }
};              
int main()
{
    A a = A();
}

因为复制构造函数是不可访问的,否则可以省略复制操作。

同样使用第一个提供相应的对象将被

值初始化,而使用第二个提供相应的对象将被默认初始化。