C++17版本中,std::addressof
的规范已更改:现在它可以是一个常量表达式。然而,cppreference说:
如果
E
是一个左值常量子表达式,则表达式std::addressof(E)
是一个常量子表达式。
- 什么是常量子表达式?
- 举个例子,什么情况下
std::addressof(E)
将是一个常量表达式? - 举个例子,什么情况下
std::addressof(E)
不会是一个常量表达式?
std::addressof(E)
将是一个常量表达式。
- 当E是一个非constexpr变量时,std::addressof(E)
将不会是一个常量表达式。
x
(自动变量)是一个常量表达式;因此,核心常量表达式的定义是否也已更改,将某些常量表达式降级为子表达式? - M.Mx
(第二个)是一个核心常量表达式(和一个转换常量表达式),但不是一个常量表达式。所以,回到OP的第一个问题:你已经给出了常量子表达式的定义,但是对我来说仍然不清楚其含义。所有核心常量表达式也都是常量子表达式吗?有没有任何常量子表达式不是核心常量表达式? - M.M