次のコードはコンパイルされません。なんで?
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 );
}
次のコードはコンパイルされません。なんで?
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 );
}
デフォルトの引数値はコンパイル時にバインドされます。
「this」は実行時にのみ定義されるため、使用できません。
詳細な説明については、ここを参照してください。 デフォルトの関数パラメーターはC ++で定数でなければなりませんか?
他の人は、これが機能しない理由についてすでにコメントしています。コメントの1つから:
「...式は、現在のスコープに表示される関数、定数式、およびグローバル変数を組み合わせることができます。式にローカル変数または非静的クラスメンバー変数を含めることはできません...」
optional
明確かどうかはわかりませんが、余分な機能を削除するために使用できます。
void f( boost::optional<int> i = boost::none ) { if(!i) i = j; ... }