C++编译器为什么会混淆"默认构造函数"和"无参数的函数声明"该如何处理
C++编译器为什么会混淆默认构造函数和无参数的函数声明?如下代码:C/C++ codeclass x{int ipublic:x()
C++编译器为什么会混淆"默认构造函数"和"无参数的函数声明"?
如下代码:
C/C++ codeclass x{ int i;public: x():i(23){} x(int ii):i(ii){}};int main(){ x x1(); //编译器混淆了ctor和函数 x x2(24);//这个编译器就不会把ctor和函数混淆 return 0;}
VC10编译会提示: “x x1(void)”: 未调用原型函数(是否是有意用变量定义的?)
我想知道,难道是C++标准规定的,如果采用默认构造函数,必须"不可以"带一个空的括号? 否则当成函数的声明来处理?
[解决办法]我只想问一句,如果x x1()意为“定义一个变量x1,类型为x,使用默认构造函数”
那么该怎么定义“名为x1的函数,无输入参数,返回值为x类型”
[解决办法]没理解
x x1()应该是函数吧.... “名为x1的函数,无输入参数,返回值为x类型”
[解决办法]x x1();应该写成x x1;
[解决办法]明明是人弄混淆了一些东西,却说成编译器弄混淆了一些东西,这是很不好的习惯
[解决办法]x x1(); //编译器混淆了ctor和函数
这句是函数签名。
[解决办法]>我想知道,难道是C++标准规定的,如果采用默认构造函数,必须"不可以"带一个空的括号? 否则当成函数的声明来处理?
是。C++其中的一个蛋疼之处:most vexing parse。这个会规定用x x1();写的必须按照函数声明来处理。
[解决办法]x():i(23);是声明
[解决办法]这个嘛, 不是因为编译器太笨而"混淆", 即使聪明如人类, 也会混淆啊.
C/C++ codex x1();
[解决办法]
这是C++兼容C的结果。
x x1();如果这是默认构造,那么怎么表示x1是函数声明?
[解决办法]
同时这样也和原始类型/内建类型保持语法一致。
int i;
x x1;
int i(5);
x x1(24);