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

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

DDD
リリース: 2024-11-27 22:44:15
オリジナル
480 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート