错误:表达式必须具有常数值.对于一个明显的常数值
Error: expression must have constant value. For a Clearly Constant Value
我有一个非常简单的项目,它在VS2015中产生奇怪的行为:
#include "Vec2f.h"
#include "StaticRendercomponent.h"
int main(int argc, char** argv)
{
constexpr Vec2f position(0.0f, 0.0f);
constexpr PhysicsComponent component(position, 15.0f);
return 0;
}
VS2015以红色突出显示构造函数中的position
参数。将鼠标悬停在高亮显示上时,会出现以下消息:
constexpr Vec2f position = {(0.0f), (0.0f)}
expression must have constant value
与错误高亮显示和消息相反,程序编译和运行没有任何障碍,构建日志中没有任何消息,警告级别为4和"将警告视为错误";活跃。
有VS显示这样的错误,并继续编译我的程序,甚至没有在构建日志中显示消息是…至少可以说令人不安。
为什么显示这个消息?
为什么不停止应用程序的编译和运行?
constexpr Vec2f::Vec2f(const float x, const float y) noexcept:
x(x),
y(y)
{
}
PhysicsComponent构造函数:
constexpr PhysicsComponent::PhysicsComponent(Vec2f position, float mass, Vec2f momentum) noexcept:
current(position, mass, momentum),
previous(current),
interpolated(current)
{
}
三个数据成员"current"、"previous"、"&"answers"&;interpolated&;"类型为PhysicsState,其构造函数详细说明如下
constexpr PhysicsState::PhysicsState(Vec2f position, float mass, Vec2f momentum) noexcept:
mass(mass),
inverseMass(MathUtils::computeInverse(mass)),
position(position),
momentum(momentum),
externalForce(ZERO_VECTOR)
{
}
computeInverse的签名如下:
template<typename T>
constexpr T computeInverse(T value) noexcept
我仍然想知道如果物理状态没有成功地被constexpr初始化由编译器由于调用computerInverse()
,但添加行:
constexpr PhysicsState test(position, 15.0f);
To main()
编译并运行时没有消息,也没有高亮显示。
如果编译,忽略智能感知。它有时只是发出错误的警告。
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- C++表达式必须具有常数值
- 表达式必须具有常数值,变量不能用作定义数组大小的常数
- C++重载|(按位OR)运算符,返回常数值
- 我的代码仅适用于一个输入.请指教
- 确定LLVM中的常数值
- 在编译时间之前抓取常数值
- 如何基于用户设置的初始变量设置一组常数值
- C++:在函数内部声明数组时,表达式必须具有常数值
- 外部声明变量的定义适用于一个函数,但不适用于另一个函数
- 常数值可能不一致
- 初始化ctor中的随机常数值
- 使用整数常量0初始化实例,但不使用其他常数值或整数变量
- 从模板参数中指定常数值
- C++std用一个常数值列出初始化,它是否会改变性能
- c++表达式必须有一个常数值
- 如何创建一个std::map的常数值,它仍然可以被[]操作符访问
- 表达式在c++中必须有一个常数值错误
- 错误:表达式必须具有常数值.对于一个明显的常数值
- 在c++中表达式必须有一个常数值