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;

デフォルトのコンストラクターを使用して文字列インスタンスを作成します。

2番目のケースでは、

string params();

文字列を返す関数へのポインタを作成します。そのタイプでは、operator + =(const string&)は明らかに定義されていません。

はい、それは言語の少し紛らわしい機能です。デフォルトのコンストラクターを使用しない場合、実際に次のように書くことができるからです。

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