ホームページ >バックエンド開発 >C++ >C で参照渡しパラメーターでデフォルト値を使用するにはどうすればよいですか?

C で参照渡しパラメーターでデフォルト値を使用するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-27 22:44:15479ブラウズ

How Can I Use Default Values with Pass-by-Reference Parameters in C  ?

C でのデフォルト値を使用した参照によるパラメーターの受け渡し

C では、関数パラメーターは値または参照の両方で渡すことができます。値渡しの場合、パラメーターの値のコピーが作成され、このコピーが関数に渡されます。参照渡しの場合、関数はパラメータのメモリ アドレスを直接操作します。

パラメータを参照渡しする場合、パラメータの場合と同じ方法でデフォルト値を指定することはできません。価値。これは、デフォルト値は関数の定義時に初期化されますが、参照パラメータは関数が引数を渡されて呼び出されたときにのみ初期化されるためです。

説明のために、次の関数宣言を考えてみましょう。

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

ここでは、「State」パラメータは ULONG への参照として宣言され、「sequence」パラメータはブール値として宣言されています。ただし、デフォルト値を "State" ("= 0") に割り当てるとエラーが発生します。

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 参照を非左辺値 (つまり、一時的な表現)。ただし、const 参照のデフォルト値を指定することは可能です:

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

この場合、「State」パラメータは ULONG への const 参照であり、デフォルト値 (「= 0」) です。は定数左辺値です。これにより、「State」の値を指定せずに関数を呼び出すことができます。

このルールの 1 つの例外は、静的変数を非 const 参照のデフォルト値として使用する場合です。

static int AVAL = 1;

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

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

この例では、「x」パラメータは int への非定数参照であり、デフォルト値 (「AVAL」) は静的変数です。これにより、「x」の値を指定しなくても関数を呼び出すことができます。ただし、このテクニックの実際的な用途は限られています。

以上がC で参照渡しパラメーターでデフォルト値を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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