C ++默认构造函数:string params vs string params()

时间:2012-10-16 09:02:17

标签: c++ default-constructor

  

可能重复:
  Is no parentheses on a constructor with no arguments a language standard?

任何人都可以解释为什么这些行不会给我一个错误:

string params;
params+="d";

但这些行:

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

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

2 个答案:

答案 0 :(得分:7)

这不是对象:

 string params();

这是函数返回字符串:

 string params();

像这样:

 string params(void);

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

此问题有自己的名称:http://en.wikipedia.org/wiki/Most_vexing_parse

答案 1 :(得分:1)

在第一种情况下使用

string params;

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

在第二种情况下

string params();

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

是的,这是一种令人困惑的语言特性,因为当你使用非默认构造函数时,你真的可以写一些。

string params("d");