重複の可能性:
引数のないコンストラクターに括弧がないのは言語標準ですか?
これらの行でエラーが発生しない理由を誰かが説明できますか?
string params;
params+="d";
しかし、これらの行:
string params();
params+="d";
このエラーを教えてください:エラーC2659:'+ =':左オペランドとして機能
重複の可能性:
引数のないコンストラクターに括弧がないのは言語標準ですか?
これらの行でエラーが発生しない理由を誰かが説明できますか?
string params;
params+="d";
しかし、これらの行:
string params();
params+="d";
このエラーを教えてください:エラーC2659:'+ =':左オペランドとして機能
これはオブジェクトではありません:
string params();
これは文字列を返す関数です:
string params();
このような:
string params(void);
したがって、エラーは明らかです。左オペランドとして機能します。
この問題には独自の名前があります:http://en.wikipedia.org/wiki/Most_vexing_parse
最初のケースでは
string params;
デフォルトのコンストラクターを使用して文字列インスタンスを作成します。
2番目のケースでは、
string params();
文字列を返す関数へのポインタを作成します。そのタイプでは、operator + =(const string&)は明らかに定義されていません。
はい、それは言語の少し紛らわしい機能です。デフォルトのコンストラクターを使用しない場合、実際に次のように書くことができるからです。
string params("d");