ホームページ >バックエンド開発 >C++ >C 関数で `std::array` 参照パラメータを使用すると、定数式の評価が妨げられるのはなぜですか?

C 関数で `std::array` 参照パラメータを使用すると、定数式の評価が妨げられるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-13 08:02:11268ブラウズ

Why Does Using `std::array` Reference Parameters in a C   Function Prevent Constant Expression Evaluation?

参照パラメータと定数式

提供された C コードでは、concatenate 関数は std::array 型の 2 つの参照パラメータを受け取ります。ただし、コンパイル中に発生したエラーは配列のサイズ メンバー関数に関連しており、参照の性質により 定数式 とみなされません。

C 標準によれば、コア定数式は、次のように評価されない式として定義されます。

  • ID 式 (つまり、参照)を参照型の変数またはデータ メンバーに渡します。ただし、参照が次の場合を除きます。

    • 先行する初期化がある
    • 定数式で使用可能
    • 有効期間が開始された期間式の評価

この場合、配列はこれらの基準のいずれも満たしていません。事前の初期化がなければ、参照を定数式として評価することはできません。

したがって、size メンバー関数は参照パラメーター (つまり、data1.size()) で呼び出されるため、これは定数式とみなされず、コンパイル エラーが発生します。

この問題を解決するには、テンプレート パラメータ S1 および S2 を直接使用して、参照パラメータの size メンバー関数に依存する代わりに、結果配列のサイズを指定します:

auto result = std::array<uint8_t, S1 + S2>{};

以上がC 関数で `std::array` 参照パラメータを使用すると、定数式の評価が妨げられるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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