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 也不允许此代码:
推荐阅读
- php - 序列化器 virtualProperty 和访问器有什么区别?
- python - 用简单的例子学习正则表达式
- java - 不可读的 Pom 文件 - Maven
- javascript - 计算第二行的 Y1,它是第一行大小的一半
- python - 如何在训练后恢复大型 Tensorforce 代理(18GB)
- r - 删除字符串末尾的多个斜杠并仅在 R 中保留一个
- javascript - event.state== null 和如何让 pushState 在 Firefox 上正确运行?
- php - 用户登录codeigniter后获取数据
- javascript - 两个小数位的 Javascript 正则表达式模式
- python - Python - 当`new`参数不是DEFAULT时,为什么模拟补丁装饰器不会将模拟对象传递给测试函数