这个错误信息表明在编译时期需要一个常量表达式,但是尝试调用了一个非const
构造函数。这种情况通常发生在使用constexpr
变量或者在编译时需要确定值的场景中。
constexpr
:C++11引入的关键字,用于指定表达式或对象的值在编译时就可以确定。const
构造函数:普通的构造函数,可以在运行时调用。const
构造函数:特殊的构造函数,用于创建常量对象。错误发生的原因是在需要常量表达式的地方调用了非const
构造函数。编译器无法在编译时确定非const
构造函数的返回值。
const
构造函数:如果类中有const
构造函数,可以直接使用它。constexpr
变量:如果可能,将相关变量定义为constexpr
。假设有一个类MyClass
,它有一个非const
构造函数:
class MyClass {
public:
MyClass(int value) : value_(value) {}
int getValue() const { return value_; }
private:
int value_;
};
如果尝试在编译时使用它:
constexpr MyClass obj(10); // 错误:无法在应使用常量表达式的情况下调用非“const”构造函数
解决方法之一是添加一个const
构造函数:
class MyClass {
public:
constexpr MyClass(int value) : value_(value) {}
int getValue() const { return value_; }
private:
int value_;
};
或者使用工厂方法:
class MyClass {
public:
static constexpr MyClass create(int value) {
return MyClass(value);
}
int getValue() const { return value_; }
private:
int value_;
};
constexpr MyClass obj = MyClass::create(10); // 正确
通过上述方法,可以解决在编译时需要常量表达式但调用非const
构造函数的问题。
领取专属 10元无门槛券
手把手带您无忧上云