2

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

一个();
A a;

“A”是一个泛型类?我一直相信您正在为该类初始化一个对象,但是,其他人似乎想到了实例化——我只是在 VB.net 中真正遇到过的东西。

请问有什么想法吗?:)

4

3 回答 3

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;
于 2013-10-10T21:06:35.063 回答
0

假设您的完整程序是:

class A
{
};

A a;

那么答案是“两者”。

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

这个声明也是一个定义。类型A必须是完整的。

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

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

术语“实例化”的字典定义是描述此声明的适当方式。声明“实例化”了一个 object a,它是 class 的一个“实例” A

于 2013-10-10T22:22:15.567 回答
0

这是大多数情况下的声明。这声明了一个名为的函数,该函数a返回类型A并且不接受任何参数。

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

于 2013-10-10T21:07:08.917 回答