操作符重载 const 和引用的意义是什么?

2025-01-06 08:27:50
推荐回答(1个)
回答1:

1. 左值原指赋值操作符左边的操作数.x = y, x为左值
C++里的左值是可以被读写的变量,所以左值可以放在等号左右两边.

2.const变量是只读的变量,所以它只能放等号右边,不能作为左值使用

3.struct widget
{
widget& operator[]( size_t ) { return *this ; }
} ;
由于widget类没有定义const版本的op[],所以不能被const widget类型的对象和句柄所调用.
const widget w ;
const widget& wr = w ;
w[0] ; // error.
wr[0] ; // error
问题不在于我们自己手动定义的const widget对象不能调用op[],而在于
const widget& func( const widget& rhs )
{
rhs[0] ;
}
没有const版本的op[]的widget将无法调用这个函数,而这个函数在C++那里太常见了.

所以我们很顺其自然地定义
struct widget
{
1.widget& operator[]( size_t ) { return *this ; } // for non-const
2.widget& operator[]( size_t ) const { return *this ; } // for const
} ;
同样,我们不能不定义1 .因为2是不能被普通的widget对象调用的.
------------------------------------------------------------------------------------------------------------------
C++东西很多,建议你一个一个理解.不然一大堆陌生的东西扑过来,就分不清谁是谁非了.