C++ 関数の呼び出し規則は何ですか?

WBOY
リリース: 2024-04-12 10:15:01
オリジナル
617 人が閲覧しました

C には、値による受け渡し、ポインターによる受け渡し、参照による受け渡し、RVO による受け渡しという 4 つの関数呼び出し規則があります。値渡しではパラメータのコピーが渡され、ポインタ渡しではパラメータのアドレスが渡され、参照渡しではパラメータの参照が渡され、RVO による渡しでは、特定の条件下でオブジェクトの内容が直接移動されます。

C++ 函数调用约定有哪些?

#C 関数呼び出し規約

関数呼び出し規約は、関数呼び出し中にパラメーターがどのように渡されるか、および呼び出しがいつ返されるかを指定します。結果を返す方法。 C には 4 つの主要な関数呼び出し規則があります:

1. 値渡し

    パラメーターのコピーが関数に渡されます。
  • 関数はコピーに対して動作し、元の値には影響しません。
  • 基本的な型 (int、float など) に対して効率的です。

2. ポインタ渡し

    パラメータのアドレスが関数に渡されます。
  • 関数は、ポインタを介して元の値を指したり、元の値を変更したりできます。
  • 関数が可変数の引数を返すことができるようにします。

3. 参照渡し

    パラメータの参照 (エイリアス) が関数に渡されます。
  • 関数は、参照を通じて元の値を指したり、変更したりできます。
  • ポインターで渡すよりも効率的です (ポインターの逆参照を回避します)。

4. RVO を通過する (戻り値の最適化、戻り値の最適化)

    関数が非参照オブジェクトとそのオブジェクトを返す場合他のオブジェクトによって参照されると、コンパイラは RVO を実行します。
  • RVO では、関数は一時コピーを作成して返すのではなく、オブジェクトの内容を呼び出し元のコンテキストに直接移動します。

実際的なケース

// 通过值传递整数
void func_by_val(int val) {
  val++;  // 不会影响原始值
}

// 通过指针传递整数
void func_by_ptr(int *val) {
  (*val)++;  // 会影响原始值
}

// 通过引用传递整数
void func_by_ref(int &val) {
  val++;  // 会影响原始值
}

int main() {
  int a = 5;

  func_by_val(a);
  std::cout << a << std::endl;  // 输出 5

  func_by_ptr(&a);
  std::cout << a << std::endl;  // 输出 6

  func_by_ref(a);
  std::cout << a << std::endl;  // 输出 7
}
ログイン後にコピー

以上がC++ 関数の呼び出し規則は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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