静的定数参照を含む未定義の参照
const int & などの静的定数への参照を含む関数を実装する場合。 a、コンパイラで「未定義の参照」エラーが発生する可能性があります。このエラーは、定数が静的として宣言されているにもかかわらず、関数が呼び出されるコンテキストで定数が定義されていないことが原因で発生します。
C 標準 (9.4.2/4) によれば、静的const 整数型のデータ メンバーは、その宣言内で constant-initializer を使用して初期化できます。ただし、関数パラメーターで使用する場合、定数参照で渡すことは (3.2/2 に従って) それを「使用」することになり、名前空間スコープ内でその定義の要件がトリガーされます。
提供された例では、静的定数 kConst は、関数 foo の行 foo(kConst) で使用されます。定数がどこにも定義されていないため、コンパイラは未定義のオブジェクトへの参照を作成しようとします。これを解決するには、開発者は、例で提案されている解決策で示されているように、kConst の定義を提供するか、定数を値で渡す (一時的なオブジェクトの作成を強制する) 必要があります。
GCC では、定数を値で渡すことができる場合があります。 (static_cast
以上が静的定数参照を関数に渡すと「未定義の参照」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。