可能重复:
使用空括号集调用默认构造函数时出错
我附上了测试程序.题:
如果我声明如下,则没有创建对象,并且不调用默认构造函数.'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);
}
Run Code Online (Sandbox Code Playgroud)
// - - - 结束 - - -
grCell c3()和之间有什么区别grCell c1?
第一个声明一个函数,第二个声明创建一个名为c1该类型的对象grCell.
grCell c3();
Run Code Online (Sandbox Code Playgroud)
它不会创建一个对象,而是声明一个名称c3不带参数的函数,并返回一个类型的对象grCell.
它是C++中最令人烦恼的解析.