这个问题已经在这里有了答案:
已关闭8年。
我附有测试程序。
问题:
如果我这样声明,则不会创建任何异议,并且
默认的构造函数没有被调用。
'grCell c3();'//坏的
然而,
这样声明就可以了。创建一个对象并调用其构造函数。
'grCell c1;'//好的
'grCell c3()'和'grCell c1'有什么区别?
谢谢!
托德
//- - 开始 - - - -
#include <iostream>
#include <cstdio>
typedef unsigned int uint;
using namespace std;
//
class grCell {
public:
grCell() { printf("HERE_0\n"); };
grCell(int i) { printf("HERE_1\n"); };
~grCell() {};
void setX(int x) { _x = x; }
//
//
private:
int _x:22;
};
int main()
{
grCell c1; // good
c1.setX(100);
grCell c3(); // bad
c3.setX(100);
grCell c2(5);
c2.setX(10);
}
//- - - 结尾 - - -
最佳答案
第一个声明一个函数,第二个创建一个名为c1
的对象,其类型为grCell
。
grCell c3();
它不会创建对象,而是声明一个名称为
c3
的函数,该函数不带任何参数并返回grCell
类型的对象。它是C++中的 Most vexing parse 。