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

标签 c++ visual-c++

<分区>

我写了一个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++ 有什么区别?

最佳答案

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

https://godbolt.org/z/SvFEAW

关于c++ - 函数调用必须在常量表达式中具有常量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52438354/

相关文章:

c++ - Raymond Chen 的单例实现使用狡猾的转换?

c++ - 为什么我在 ATL 的资源文件中找不到控件 ID?

c++ - 错误 LNK2038 : mismatch detected for '_MSC_VER' : value '1600' doesn't match value '1700' in CppFile1. 对象

c++ - 为什么我在使用enable_shared_from_this()时会遇到异常?

c++ - 特征矩阵的就地元素类型转换

c++ - 多个 fork() 带管道的 child

.net - .NET4 中的命令链接

C++ 带指针的二维数组

c++ - std::memory_order_acquire 和 memory_order_release 可以分开使用吗?

通过函数签名时 C++ 模板不编译