5
値の初期化での私の試みは関数宣言として解釈され、なぜa(())にならないのですか?解決しますか?
Stack Overflowが私に教えてくれた多くのことの1つは、「最も厄介な解析」として知られているものです。これは、次のような行で古典的に示されています。 A a(B()); //declares a function これは、ほとんどの場合a、型のオブジェクトの宣言のように見えますがA、一時Bオブジェクトをコンストラクターのパラメーターとして受け取りますが、実際には、をa返す関数の宣言であり、A戻り値をB持ち、それ自体はパラメーターをとらない関数へのポインターを受け取ります。同様にライン A a(); //declares a function オブジェクトの代わりに関数を宣言しているため、同じカテゴリにも該当します。さて、最初のケースではB()、コンパイラがオブジェクトの宣言として解釈するため、この問題の通常の回避策は、ブラケット/括弧のセットを追加することです。 A a((B())); //declares an object ただし、2番目のケースでは、同じことを行うとコンパイルエラーが発生します。 A a(()); //compile error 私の質問は、なぜですか?はい、私は正しい「回避策」がそれをに変更することであることを非常によく知っていますが、最初の例のコンパイラに対してA a;追加()が何をしてそれを再適用するときに機能しないのか知りたいです2番目の例。あるA a((B()));問題を回避するには、標準的に書き込まれた特定の例外?
158
c++