【问题标题】:A function call must have a constant value in a constant expression [duplicate]函数调用必须在常量表达式中具有常量值[重复]
【发布时间】:2018-09-21 07:07:31
【问题描述】:

我已经写了一个c++程序作为打击:

#include <iostream>
int main()
{
    constexpr double a = 4.0;
    constexpr double b = sqrt(a);
    std::cout << b << std::endl;
    return 0;
}

当我尝试使用 Visual Studio 2017 编译此代码时,我收到一条错误消息,指出函数调用必须在常量表达式中具有常量值。坏行是“constexpr double b = sqrt(a);”。

但是当我用g++编译同样的代码时,没有报错。

错误的原因是什么? g++和vc++有什么区别?

【问题讨论】:

标签: c++ visual-c++


【解决方案1】:

sqrt 不是constexpr 函数,因此不能在constexpr 表达式中使用。 GCC 似乎有一个特殊的内置版本sqrt,即constexpr。 Clang 也不允许此代码:

https://godbolt.org/z/SvFEAW

【讨论】:

    【解决方案2】:

    sqrt 必须不是常量表达式,因此 constexpr double b = sqrt(a); 不应该工作。 Clang does not build this code as well。您还需要包含 &lt;cmath&gt; 标头才能使用此功能。

    【讨论】:

      【解决方案3】:
        include cmath library since you using a sqrt() function 
      

      http://www.cplusplus.com/reference/cmath/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-07
        • 2016-09-22
        • 2022-01-05
        • 1970-01-01
        • 2020-08-11
        • 2011-11-21
        相关资源
        最近更新 更多