【发布时间】:2021-09-20 04:30:13
【问题描述】:
我一直认为:
- 写入
const_casted 变量是UB - constexpr 中不允许使用 UB
所以我很困惑为什么这个代码compiles:
constexpr int fn(){
int v = 42;
return [v]() {
const_cast<int&>(v)+=5;
return v;
}();
}
static constexpr auto val = fn();
int main() {
return val;
}
注意:我知道没有理由不允许这样做,因为结果应该是显而易见的,我更感兴趣的是法律解释为什么允许这样做。
【问题讨论】:
-
如果你给两个变量不同的名字
return [x = v]() { ...,例子会更清楚 -
@463035818_is_not_a_number 这会破坏这个例子。
-
@Deduplicator 不在这里:godbolt.org/z/zf3fM94vd。不知道我是否理解
-
@463035818_is_not_a_number 抱歉。它只会消除该示例的一个特点。即第一个
v上没有const很重要。我想我应该睡一会儿…… -
某些东西有效并不罕见,因为没有理由(用你的话)“不允许它有效”。
标签: c++ undefined-behavior c++20 constexpr