2

可能重复:
没有参数的构造函数上没有括号是语言标准吗?

谁能解释为什么这些行没有给我错误:

string params;
params+="d";

但这些行:

string params();
params+="d";

给我这个错误:错误 C2659: '+=' : 作为左操作数的函数

4

2 回答 2

7

这不是对象:

 string params();

这是函数返回字符串:

 string params();

像这样:

 string params(void);

所以现在的错误很明显:函数作为左操作数

这个问题有自己的名字:http ://en.wikipedia.org/wiki/Most_vexing_parse

于 2012-10-16T09:03:42.457 回答
1

在第一种情况下

string params;

使用默认构造函数创建一个字符串实例。

在第二种情况下

string params();

创建一个指向返回字符串的函数的指针。在该类型上,operator+=(const string&)显然没有定义。

是的,这是该语言的一个有点令人困惑的特性,因为当您使用非默认构造函数时,您真的可以编写例如

string params("d");
于 2012-10-16T09:08:49.600 回答