Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.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++;使用参数调用默认构造函数与不使用参数调用默认构造函数_C++_Default Constructor - Fatal编程技术网

C++ C++;使用参数调用默认构造函数与不使用参数调用默认构造函数

C++ C++;使用参数调用默认构造函数与不使用参数调用默认构造函数,c++,default-constructor,C++,Default Constructor,可能重复: 像这样调用基构造函数有什么区别吗 Foo afoo; vs 是:第一个是变量定义,第二个是函数声明。现在,让我们讨论这两个表达式之间的差异这一更有趣的问题: new Foo() new Foo 是否存在差异取决于Foo的类型及其成员 如果Foo有一个显式的默认构造函数,那么这两个构造函数是相同的 如果没有默认构造函数,则可能存在差异!如果有任何成员是聚合或内置类型,则它将在第一个表达式中初始化,但不会在第二个表达式中初始化,除非所有具有默认构造的成员都将是默认构造的 请注意

可能重复:

像这样调用基构造函数有什么区别吗

Foo afoo;
vs


是:第一个是变量定义,第二个是函数声明。现在,让我们讨论这两个表达式之间的差异这一更有趣的问题:

new Foo()
new Foo
是否存在差异取决于
Foo
的类型及其成员

  • 如果
    Foo
    有一个显式的默认构造函数,那么这两个构造函数是相同的
  • 如果没有默认构造函数,则可能存在差异!如果有任何成员是聚合或内置类型,则它将在第一个表达式中初始化,但不会在第二个表达式中初始化,除非所有具有默认构造的成员都将是默认构造的
请注意,这也适用于类的成员。对于变量,您不能使用使用括号的形式,即,为了确保对象已初始化,您需要使用

Foo aFoo = Foo();

如果没有显式构造函数接受参数或您不知道(例如,在模板代码中)。

是的,#2正在声明一个函数。是的,第一个构造函数构造的对象类型为
Foo
,第二个构造函数没有。谢谢您的分解,很抱歉重复了'?'
Foo aFoo = Foo();