在C++20标准(N4860)中,哪部分规定内联函数需在TU中使用前定义?
关于C++20中内联函数定义时机的条款说明
在C++20标准(N4860)中,内联函数必须在翻译单元(TU)中被使用前完成定义的要求,由**[basic.def.odr]/4**条款规定。该条款的核心内容为:
对于内联函数或内联变量,在其被ODR使用的每个翻译单元中,对应的定义必须存在,且在该使用点之前或同一位置可见。
结合相关示例内容进一步说明:
- 根据[dcl.constexpr]/1的规定,使用
constexpr或consteval说明符声明的函数会被隐式视为内联函数。示例中的constexpr void square(int &x)就属于这类隐式内联函数。 - 在定义
constexpr pixel small(2)时,其构造函数中调用了square(x),但此时square仅存在声明、未完成定义,违反了[basic.def.odr]/4的要求,因此small(2)无法满足常量表达式的判定条件,触发编译错误。
内容的提问来源于stack exchange,提问作者John Kalane
相关产品推荐
相关产品推荐

