首页 > 解决方案 > 函数调用必须在常量表达式中具有常量值

问题描述

我写了一个 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++

解决方案


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

https://godbolt.org/z/SvFEAW


推荐阅读