gpt4 book ai didi

c++ - 如何正确声明常量表达式?

转载 作者:行者123 更新时间:2023-12-03 12:50:53 24 4
gpt4 key购买 nike

我正在阅读The C++ Programming Language并尝试理解常量。书上说这是有效的:

const int dmv = 17; // dmv is a named constant
constexpr double max1 = 1.4∗square(dmv); // OK if square(17) is a constant expression

但是当我这样做时:

constexpr double square(double x)
{
return x * x;
}

int main()
{
const double x = 40.0;
constexpr double result = 1.2 + square(x);
}

我有两个错误:

  1. 表达式必须有一个常量值(在x中,如果我将其替换为例如12.4的值,例如square (12.4)错误消失)
  2. 函数调用必须在常量表达式中具有常量值(在 square 方法调用中。)

这些错误的原因是什么?我缺少什么?

最佳答案

在 C++11 之前,constexpr 并不存在,并且编译时算术只能用于整数类型(或多或少)。

在该语言中,尽可能使 const int“变量”真正成为常量是有意义的,但对于 const double 则不然。

C++11 引入了 constexpr,因此不再需要 const T 变量的特殊规则,但删除该规则会不必要地破坏现有代码。 C++11 还引入了编译时浮点运算,但由于 const double 变量以前从未被视为常量表达式,而现在更改这一点没有什么好处,因此您需要显式地说 constexpr

constexpr double square(double x)
{
return x * x;
}

int main()
{
constexpr double x = 40.0;
constexpr double result = 1.2 + square(x);
}

关于c++ - 如何正确声明常量表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22733749/

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