c++ const 修饰的取地址操作符重载
时间: 2023-09-14 09:11:30 浏览: 114
在 C++ 中,可以使用 const 修饰成员函数,以表示该函数不会修改对象的状态。如果要重载取地址操作符(&),也需要考虑 const 成员函数的情况。
如果类中有一个 const 成员函数,那么对于这个对象调用取地址操作符时,返回的是 const 类型的指针。如果没有 const 成员函数,返回的是非 const 类型的指针。
下面是一个示例代码:
```c++
#include <iostream>
class MyClass {
public:
int value;
MyClass(int v) : value(v) {}
// 非 const 成员函数
MyClass* operator&() {
std::cout << "non-const operator&" << std::endl;
return this;
}
// const 成员函数
const MyClass* operator&() const {
std::cout << "const operator&" << std::endl;
return this;
}
};
int main() {
MyClass obj(42);
const MyClass const_obj(24);
MyClass* p = &obj; // 调用非 const 成员函数
const MyClass* q = &const_obj; // 调用 const 成员函数
return 0;
}
```
输出结果为:
```
non-const operator&
const operator&
```
可以看到,对于 obj,调用的是非 const 成员函数;对于 const_obj,调用的是 const 成员函数。
注意,在重载取地址操作符时,不能返回一个引用类型。因为取地址操作符返回的是一个指针,而引用类型与指针类型有所不同。如果要返回引用类型,可以考虑使用重载解引用操作符(*)。
阅读全文