this不能在常量表达式中使用

问题

在一个类中,有下述代码

class Circle
{
public:
	Circle() {
		int b[a] = {0};
	};
	~Circle() {};

private:
	const int a = 10; // 错误做法
};

此时会出现报错:this不能在常量表达式中使用(a nonstatic member reference must be relative to a specific object)

但是,在下述情况下,又可以正常使用

int main()
{
	// 测试const定义数组
	const int x = 10;
	int y[x] = { 0 };
}

解决方法

改写成

class Circle
{
public:
	Circle() {
		int b[a] = {0};
	};
	~Circle() {};

private:
	// const int a = 10; // 错误做法
	static const int a = 10; // 正确做法
};

原因

在C++中,类的构造方法里面调用私有const变量去定义数组,而在类创建的时候调用构造方法,此时还没有加载const变量,即当我们创建一个const对象或变量时,直到构造函数完成初始化过程,对象或变量才能真正取得其常量属性。

参考链接

https://blog.csdn.net/qq_45801299/article/details/121346269

1人评论了“this不能在常量表达式中使用”

  1. Pingback: 机器人位姿反馈控制开发日志 - Fivyex's Blog

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据