gpt4 book ai didi

c++ - 为什么在 constexpr 非成员函数中访问全局非常量变量是不合法的

转载 作者:行者123 更新时间:2023-11-30 03:29:52 24 4
gpt4 key购买 nike

int d = 1;
constexpr void add()
{
d++;
}

int main()
{

}

GCC 7.1 会报如下错误。错误信息非常清楚。问题是我在 constexpr 中没有看到任何明确的解释。来描述它是非法的。

谁能解释一下这个案例违反了规范中定义的哪些规则?

main.cpp: In function 'constexpr void add()':main.cpp:8:1: error: the value of 'd' is not usable in a constant expression } ^main.cpp:4:5: note: 'int d' is not const int d = 1;     ^

最佳答案

来自 cppreference :

A core constant expression is any expression that does not have any one of the following in any subexpression (ignoring unevaluated expressions such as the operand of sizeof or the right operand of builtin && when the left operand evaluates to false).

...

16) modification of an object, unless the object has non-volatile literal type and its lifetime began within the evaluation of the expression.

在您的示例中,d的生命周期开始于 add 之前被评估 - 所以对 d 的任何修改里面add是非法的。引用文献中的示例专门用于递增,但这适用于所有修改。

编辑:没有引用标准,因为据我所知,你必须购买它......

关于c++ - 为什么在 constexpr 非成员函数中访问全局非常量变量是不合法的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45354464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com