C++ 重载运算符[]是如何工作的? struct行显示策略 { 静态std::字符串分隔符(){return',“;} }; 结构列显示策略 { 静态std::字符串分隔符(){return“\n”;} }; 模板 类数组{ 公众: Array():pArray(新的T[Size]){ 阵列(T*pT):阵列(新的T[大小]) { 方法上的for(int i=0;i

C++ 重载运算符[]是如何工作的? struct行显示策略 { 静态std::字符串分隔符(){return',“;} }; 结构列显示策略 { 静态std::字符串分隔符(){return“\n”;} }; 模板 类数组{ 公众: Array():pArray(新的T[Size]){ 阵列(T*pT):阵列(新的T[大小]) { 方法上的for(int i=0;i,c++,C++,const表示该方法不允许修改对象。 第一个运算符[]返回对n处元素的引用(因此允许修改数组)-不能对常量对象调用它。 第二个操作符[]返回n处元素的副本。它不修改数组,可以在常量对象上调用。 例如: Array my_array1(); int test1=my_array1[0];//调用第一个运算符[] 常量数组my_array2(); int test2=my_array2[0];//调用第二个运算符等于 这通常适用于数组作为参数传递给函数的上下文,其中数组可能被限定为常量,因为它希望

const表示该方法不允许修改对象。
第一个运算符[]返回对n处元素的引用(因此允许修改数组)-不能对常量对象调用它。
第二个操作符[]返回n处元素的副本。它不修改数组,可以在常量对象上调用。 例如:

Array my_array1();
int test1=my_array1[0];//调用第一个运算符[]
常量数组my_array2();
int test2=my_array2[0];//调用第二个运算符等于

这通常适用于数组作为参数传递给函数的上下文,其中数组可能被限定为常量,因为它希望函数能够读取数组,但不改变数组。

成员函数有一个隐式参数
,后面的
常量
用于函数重载解析你可以这样想:

Array<int, 10> my_array1();
int test1 = my_array1[0]; // Calls first operator[]

const Array<int, 10> my_array2();
int test2 = my_array2[0]; // Calls second operator equals

为什么第二个返回的是副本而不是const引用?至于const,这很容易被谷歌搜索到。
Array<int, 10> my_array1();
int test1 = my_array1[0]; // Calls first operator[]

const Array<int, 10> my_array2();
int test2 = my_array2[0]; // Calls second operator equals
void Array::function() -> void function( Array* this )

void Array::function() const -> void function( Array const* this )