函数调用在常量表达式中必须具有常量值



我写了一个c++程序作为blow:

#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++ 有什么区别?

sqrt

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

https://godbolt.org/z/SvFEAW

sqrt必须不是常量表达式,因此constexpr double b = sqrt(a);不应该工作。Clang 也不会构建此代码。您还需要包含<cmath>标头才能使用此函数。

include cmath library since you using a sqrt() function 

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

最新更新