初始化或实例化

时间:2013-10-10 20:59:49

标签: c++ oop object

哪个最好地描述了以下内容:

<德尔>     A();
A a;

“A”是一般类?我一直相信你正在为这个类初始化一个对象,但是,其他人似乎想到了实例化 - 我在VB.net中才真正遇到的东西。

请问? :)

3 个答案:

答案 0 :(得分:6)

A a(); 

它声明了一个返回A类型的函数。这对许多用户来说都是一个惊喜。这与Most vexing parse

有关

在以下两个例子中,意图很明显

A a(3);    // an object a, of type A, initialized with 3
A a(int);  // a *function* a, taking an int parameter and returning A

但是当括号为空时,默认为函数声明。如果您想要变量,则应删除();

A a;

答案 1 :(得分:0)

这是大多数案件的宣言。这声明了一个名为a的函数,它返回类型A并且不带参数。

由于A可能是一个宏或一些奇怪的东西,我不会说它总是一个声明。

答案 2 :(得分:0)

假设您的完整计划是:

class A
{
};

A a;

然后答案是“两个”。

C ++的术语不一定与其他语言的术语相同。使用C ++术语,声明 A a声明类型 a对象 A

声明也是定义。类型A必须完成

[注意:如果类型A模板专业化(例如typedef X<int> A),则该专业化将隐式实例化。] < / p>

在C ++术语中,初始化意味着为对象提供初始。在该示例中,对象a默认初始化,这可能导致无法执行实际初始化。

术语“实例化”的字典definition是描述此声明的适当方式。声明“实例化”一个对象a,它是类A的“实例”。