C++ - 重载 [] 运算符
C++ - overloading [] operator
我有一个模板class数组:
template <class T=int, int SIZE=10>
class Array {
T TheArray[SIZE];
public:
void Initialize() {
for (int idx=0; idx < SIZE; idx++) {
TheArray[idx] = T();
}
}
T& operator [](int idx) {
return TheArray[idx];
}
T operator [](int idx) const {
return TheArray[idx];
}
}
我对运算符 []
重载有一些疑问(我在网上找到了这个例子)。
我知道 T& operator [](int idx)
return 是对索引为 idx
的数组值的引用,并且 T operator [](int idx) const
return 是它的值。
但是,我不确定在哪种情况下将使用 []
运算符 returned 引用或值。
此外,如果我更改 T operator [](int idx) const
-> T operator [](int idx)
,编译器会报错。这是为什么?
我能理解编译器抱怨是因为只有 return 类型不同,但为什么添加 const
时它不抱怨?这仅意味着 class 内部的 none 被修改了,对吗?
我尝试调试这个小的主要实现:
int main() {
int val;
Array<> intArray;
intArray.Initialize();
val = intArray[1];
printf("%d", intArray[1]);
intArray[1] = 5;
}
并且每次调用T& operator [](int idx)
。为什么?
提前致谢。
operator[]
重载将根据您调用它的对象的 const
限定进行 select。
Array<> intArray;
intArray[1]; //calls T& operator[]
const Array<> constArray;
constArray[1]; //calls T operator[]
如果从 T operator[]
中删除 const
,则会出现错误,因为成员函数不能具有相同的 const
限定和参数,因为无法 select他们之间。
首先,把[]
当作调用this->operator[]
的语法糖。
如果 this
是一个 const
指针,将调用 const
版本,否则将调用非 const
版本。
继续,您应该使用 const T& operator [](int idx) const {
,即 const
版本 return 作为 const
参考。这将节省进行深拷贝的开销。
最后,函数 的 const
特性是其签名的 部分。这允许您基于 const
-ness 进行重载。否则你不可能有两个版本的 operator[]
.
我有一个模板class数组:
template <class T=int, int SIZE=10>
class Array {
T TheArray[SIZE];
public:
void Initialize() {
for (int idx=0; idx < SIZE; idx++) {
TheArray[idx] = T();
}
}
T& operator [](int idx) {
return TheArray[idx];
}
T operator [](int idx) const {
return TheArray[idx];
}
}
我对运算符 []
重载有一些疑问(我在网上找到了这个例子)。
我知道 T& operator [](int idx)
return 是对索引为 idx
的数组值的引用,并且 T operator [](int idx) const
return 是它的值。
但是,我不确定在哪种情况下将使用 []
运算符 returned 引用或值。
此外,如果我更改 T operator [](int idx) const
-> T operator [](int idx)
,编译器会报错。这是为什么?
我能理解编译器抱怨是因为只有 return 类型不同,但为什么添加 const
时它不抱怨?这仅意味着 class 内部的 none 被修改了,对吗?
我尝试调试这个小的主要实现:
int main() {
int val;
Array<> intArray;
intArray.Initialize();
val = intArray[1];
printf("%d", intArray[1]);
intArray[1] = 5;
}
并且每次调用T& operator [](int idx)
。为什么?
提前致谢。
operator[]
重载将根据您调用它的对象的 const
限定进行 select。
Array<> intArray;
intArray[1]; //calls T& operator[]
const Array<> constArray;
constArray[1]; //calls T operator[]
如果从 T operator[]
中删除 const
,则会出现错误,因为成员函数不能具有相同的 const
限定和参数,因为无法 select他们之间。
首先,把[]
当作调用this->operator[]
的语法糖。
如果 this
是一个 const
指针,将调用 const
版本,否则将调用非 const
版本。
继续,您应该使用 const T& operator [](int idx) const {
,即 const
版本 return 作为 const
参考。这将节省进行深拷贝的开销。
最后,函数 的 const
特性是其签名的 部分。这允许您基于 const
-ness 进行重载。否则你不可能有两个版本的 operator[]
.