ホームページ >バックエンド開発 >C++ >C 関数が非 Const 参照パラメータのデフォルト値を持てないのはなぜですか?

C 関数が非 Const 参照パラメータのデフォルト値を持てないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-28 12:16:15443ブラウズ

Why Can't C   Functions Have Default Values for Non-Const Reference Parameters?

C でデフォルト値を使用してパラメータを参照渡しする

C では、パラメータを参照渡しする場合、デフォルト値を割り当てることはできませんパラメータに値を設定します。これにより、参照パラメータのデフォルト値を使用して関数を宣言しようとするとエラーが発生します。たとえば、次のコードはエラーになります:

virtual const ULONG Write(ULONG &State = 0, bool sequence = true);

エラーが発生しました:

error C2440: 'default argument' : cannot convert from 'const int' to 'unsigned long &'
A reference that is not to 'const' cannot be bound to a non-lvalue

解決策

デフォルト値は非定数参照ではなく、定数参照に割り当てられます。これは、一時値 (デフォルト値など) を非 const 参照にバインドできないという C の制限によるものです。

回避策として、実際のインスタンスをデフォルト値として使用できます。

static int AVAL = 1;

void f( int &x = AVAL ) {
   // stuff
} 

int main() {
     f();       // equivalent to f(AVAL);
}

ただし、このアプローチの実際的な適用可能性は限られています。

以上がC 関数が非 Const 参照パラメータのデフォルト値を持てないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。