8

次のコードはコンパイルされません。なんで?

class A
{
   int j;
   void f( int i = this->j );
}

わかりやすくするために編集します。これは私がやろうとしていたことであり、より少ないコード行を使用しています...

class A
{
   void f( int i ){};
   void f( );
   int j;
};

void A::f()
{
    f( j );
}
4

2 に答える 2

11

デフォルトの引数値はコンパイル時にバインドされます。

「this」は実行時にのみ定義されるため、使用できません。

詳細な説明については、ここを参照してください。 デフォルトの関数パラメーターはC ++で定数でなければなりませんか?

于 2012-10-10T21:00:55.490 に答える
0

他の人は、これが機能しない理由についてすでにコメントしています。コメントの1つから:

「...式は、現在のスコープに表示される関数、定数式、およびグローバル変数を組み合わせることができます。式にローカル変数または非静的クラスメンバー変数を含めることはできません...」

optional明確かどうかはわかりませんが、余分な機能を削除するために使用できます。

void f( boost::optional<int> i = boost::none ) { if(!i) i = j; ... }

于 2012-10-10T21:10:49.930 に答える