为何在类中使用*this._height访问成员变量会报错?
问题解答:为什么
*this._height报错而this->_height正常? 核心问题出在运算符优先级上:
.(成员访问符)的优先级比*(解引用符)更高,所以编译器会把*this._height优先解析成*(this._height)。- 但
this是指针类型,指针只能用->访问成员,不能用.,所以this._height本身就是非法写法,自然整个表达式触发报错。
如果想用*this配合.访问成员,必须给*this加括号,写成(*this)._height——这样编译器会先解引用this得到当前对象,再用.访问私有成员_height,这和this->_height是完全等价的写法。
举个代码示例:
class cube { private: int _height; public: void set_height(int h) { this->_height = h; // 合法 (*this)._height = h; // 合法,和上面效果一致 // *this._height = h; // 非法,优先级导致解析错误 } };
内容的提问来源于stack exchange,提问作者Xiao ZHANG
相关产品推荐
相关产品推荐

