class base {
int i;
public:
base()
{
i = 10;
cout << "in the constructor" << endl;
}
};
int main()
{
base a;// here is the point of doubt
getch();
}
base a
和base a()
之间的区别是什么?
在第一种情况下,构造函数被调用但在第二种情况下不被调用!
答案 0 :(得分:24)
第二个是声明一个返回基础对象的函数a()。 : - )
答案 1 :(得分:14)
base a
声明类型为a
的变量base
并调用其默认构造函数(假设它不是内置类型)。
base a();
声明一个函数a
,它不带参数并返回类型base
。
这样做的原因是因为语言基本上指定在这种歧义的情况下,任何可以解析为函数声明的东西都应该被解析。对于更复杂的情况,您可以搜索“C ++最烦恼的解析”。
因此,我实际上更喜欢new X;
而非new X();
,因为它与非新声明一致。
答案 2 :(得分:-3)
在C ++中,您可以通过两种方式创建对象:
第一个使用以下声明:
base a; //Uses the default constructor
base b(xxx); //Uses a object defined constructor
一旦离开当前范围,该对象就会被删除。
动态版本使用指针,您需要删除它:
base a = new base(); //Creates pointer with default constructor
base b = new base(xxx); //Creates pointer with object defined constructor
delete a; delete b;