ホームページ > バックエンド開発 > C++ > C で一時オブジェクトを非 Const 参照として渡せないのはなぜですか?

C で一時オブジェクトを非 Const 参照として渡せないのはなぜですか?

Barbara Streisand
リリース: 2024-12-15 02:19:10
オリジナル
285 人が閲覧しました

Why Can't I Pass a Temporary Object as a Non-Const Reference in C  ?

一時オブジェクトを参照として渡す

次のコードのように、一時オブジェクトを非 const 参照として渡そうとする場合:

void ProcessFoo(Foo& foo)
{
}

int main()
{
    ProcessFoo(Foo(42)); // Error: Can't pass temporary object as reference
}
ログイン後にコピー

g や Clang などのコンパイラはエラーを発生させます。これは、設計上、C では一時変数を const 参照、値パラメータ、または右辺値参照に渡すことが制限されているために発生します。

この制限の背後にある理論的根拠は、非 const 参照パラメータを受け取る関数がそれらのパラメータを変更して返すことを意図しているということです。発信者に。このシナリオで一時変数を渡すことは無意味であると考えられ、エラーを示している可能性があります。

この問題を解決するには、いくつかの回避策が利用可能です。

1.一時変数の使用

一時変数を作成し、引数として関数に渡します:

Foo foo42(42);
ProcessFoo(foo42);
ログイン後にコピー

2. const 参照パラメータを使用した関数の宣言

const 参照を受け入れるように関数宣言を変更します。

void ProcessFoo(const Foo& foo)
{
}
ログイン後にコピー

3.値による受け渡し

関数がオブジェクトを値で受け入れることを許可します:

void ProcessFoo(Foo foo)
{
}
ログイン後にコピー

Visual Studio では、コンパイラ実装の制限が緩和されているため、この元のコードが許可されます。

以上がC で一時オブジェクトを非 Const 参照として渡せないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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