参照パラメータと定数式
提供された 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 サイトの他の関連記事を参照してください。