use*_*538 7 c++ constexpr kotlin
以下 constexpr 函数无法编译:
constexpr void fnc()
{
constexpr int i = 5;
constexpr auto ptr = &i;
}
Run Code Online (Sandbox Code Playgroud)
ptr考虑到所有计算都发生在 constexpr 函数中并且无需声明 constexpr 即可工作,为什么不能是ptrconstexpr?
Ayx*_*xan 16
clang 的错误消息很清楚:
非静态 constexpr 变量“i”的地址在每次调用封闭函数时可能会有所不同;添加“static”以给它一个常量地址
i这一事实constexpr与它的地址是否是常量的问题无关。[dcl.constexpr] p6constexpr中解释了变量的作用:
在任何
constexpr变量声明中,初始化的完整表达式应该是常量表达式。
变量constexpr仅由常量表达式初始化。每次调用fnc都会创建一个不同的对象i,因此地址可能会改变。
对象需要具有静态存储持续时间 ( [expr.const] p13.3 ) 才能使其地址成为常量表达式:
static constexpr int i = 5;
constexpr auto ptr = &i; // OK
Run Code Online (Sandbox Code Playgroud)
注意:自 C++23 起,在函数中static constexpr允许使用,请参阅Can you statements in a constexpr function?constexpr
| 归档时间: |
|
| 查看次数: |
548 次 |
| 最近记录: |