问个关于重载操作符的问题?请进!
我用CArray,里面的元素是包含一个结构体。当我想改变数组中的某一个位置中结构中的值时。
arr[i] = st; 结果一看MFC中的代码时。
template<class TYPE, class ARG_TYPE>
class CArray : public CObject
{
public:
// overloaded operator helpers
TYPE operator[](int nIndex) const;
TYPE& operator[](int nIndex);
}
template<class TYPE, class ARG_TYPE>
AFX_INLINE TYPE CArray<TYPE, ARG_TYPE>::operator[](int nIndex) const
{ return GetAt(nIndex); }
template<class TYPE, class ARG_TYPE>
AFX_INLINE TYPE& CArray<TYPE, ARG_TYPE>::operator[](int nIndex)
{ return ElementAt(nIndex); }
傻眼了。重载操作符有两个,一个返回引用,一个返回值。 这两个函数分别在什么时候调用?
万一调用第一个,那赋值就不成功了。 谁能解释一下区别和用法。