哪个最好地描述了以下内容:
A a;
“A”是一个泛型类?我一直相信您正在为该类初始化一个对象,但是,其他人似乎想到了实例化——我只是在 VB.net 中真正遇到过的东西。
请问有什么想法吗?:)
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;
假设您的完整程序是:
class A
{
};
A a;
那么答案是“两者”。
C++ 具有不一定与其他语言相同的术语。使用 C++ 术语,声明 A a
声明了一个类型为的对象 。a
A
这个声明也是一个定义。类型A
必须是完整的。
[注意:如果类型A
是模板特化(例如typedef X<int> A
),则该特化将被隐式实例化。]
在 C++ 术语中,初始化意味着为对象提供初始值。在示例中,对象a
将被默认初始化,这可能导致不执行实际初始化。
术语“实例化”的字典定义是描述此声明的适当方式。声明“实例化”了一个 object a
,它是 class 的一个“实例” A
。
这是大多数情况下的声明。这声明了一个名为的函数,该函数a
返回类型A
并且不接受任何参数。
由于 A 可能是一个宏或一些奇怪的东西,我不会说它总是一个声明。