from MSDN:
CArray::operator [ ]
TYPE& operator []( int nIndex );
TYPE operator []( int nIndex ) const;
Remarks
The first operator, called for arrays that are not const, may be used on either the right (r-value) or the left (l-value) of an assignment statement. The second, called forconst arrays, may be used only on the right.
第一个版本,不被const修饰,可以是左值调用也可以是右值调用。(调用者不能是const对象,只能是非const对象)
第二个版本,被const修饰,只能是右值调用。(调用者可以是const对象也可以是非const对象,但是有了第一个版本,只被const对象调用)
例如:
int it = 0;
CArray<int, int&> ca;
ca.Add(it);
int iTest = ca[0]; // 调用第一个版本
const CArray<int, int&>& p = ca;
iTest = p[0]; // 调用第二个版本