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

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

Barbara Streisand
Barbara Streisandオリジナル
2024-12-15 02:19:10287ブラウズ

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

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