3

根据我对声明和定义的理解,在全球范围内:

MyClass instance();//Declares a function that returns a MyClass
MyClass instance;//Declares an instance of MyClass

是否可以声明一个变量并将其定义为在全局范围内使用默认构造函数?如果我使用的是结构而不是类怎么办?

编辑:

好的,MyClass instance;调用默认构造函数也是如此。谁能解释这与这个例子是如何一致的:

int a; // not default constructed, will have random data 
int b = int(); // will be initialised to zero
4

3 回答 3

8
MyClass instance;

将调用默认构造函数(即没有参数的构造函数)。

这是违反直觉的,因为要使用参数调用重载的构造函数,您将执行以下操作:

MyClass instance(param1, param2);

逻辑会告诉你,你传入一个空参数列表来调用默认构造函数,但是下面的代码......

MyClass instance();

...看起来像是编译器的原型,而不是MyClass对象的构造。

structC++中a和a没有区别class,只是a默认struct有成员,a默认有成员。publicclassprivate

于 2010-12-13T00:38:43.353 回答
2
  1. 你是否在全球范围内都没有关系。
  2. MyClass instance;是一个定义(使用默认构造函数,而不仅仅是一个声明。要仅获取一个声明(例如在头文件中),您可以使用extern MyClass instance;.
  3. 对于这部分,无论MyClass是类还是结构都没有关系。C++ 中结构和类之间的唯一变化是成员和基是公共还是私有的默认解释。
  4. 如果你想明确一点,你可以写MyClass instance = MyClass();.
于 2010-12-13T00:42:05.310 回答
1
MyClass instance;

也是一个定义,使用默认构造函数。如果您只想声明它,您需要

extern MyClass instance;

这不是一个定义。然而,两者都有外部联系。

于 2010-12-13T00:39:37.810 回答