哪个最好地描述了以下内容:
<德尔> A(); 德尔>A a;
“A”是一般类?我一直相信你正在为这个类初始化一个对象,但是,其他人似乎想到了实例化 - 我在VB.net中才真正遇到的东西。
请问? :)
答案 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
的“实例”。