C++:重载运算符.奇怪的类型转换运算符
C++: Overloading operators. Curious type-transform operator
我知道C++有运算符,I不应该重载。
运算符"."是i不能重载的运算符之一。
但是,据我们所知,这种过载是坏的吗?
我认为,这真的很糟糕
但我不需要知道,如果我有对象或指向对象的指针
然而,这是有趣和危险的
class A {
public:
get_int(){ return a }
A(){ a=1 }
operator A*(){ return this }
private: int a;
};
int main(){
A a;
A* c = a;
//here, c->get_int() will return 1
}
无论x
是否为指针,都需要重载间接运算符->
以允许通用x->foo()
语法:
T * T::operator->() { return this; }
用法:
T x, * p = &x;
p->foo(); // OK as usual
x->foo(); // also OK, weirdly
示例:
#include <cstdio>
struct Foo
{
void foo() { std::puts("Boo"); }
Foo * operator->() { return this; }
};
int main() { Foo x, * p = &x; p->foo(); x->foo(); }
相关文章:
- 将内置类型变量传递给只有一个类类型参数的"+"运算符函数时自动类型转换的构造函数
- 自定义类型转换运算符在转发引用上调用时不起作用(当对象按值传递时有效)
- 模板化隐式类型转换运算符
- 具有重载类型转换运算符的函数对象崩溃
- 类型转换运算符重载与 as 非成员函数
- 从类模板中排除转换运算符...<类型名 T>基于 T 上的特征
- 初始化中的模板转换运算符类型推导规则是什么?
- C++运算符== 和用户定义的类型转换
- C++类型转换运算符
- C++11 何时相对于运算符优先级进行算术类型转换
- 在unordered_map中,C2440"类型转换":无法转换...定义运算符 == 和hash_value时
- 模板类自动类型转换的运算符重载
- clang和gcc中的模板转换运算符类型推导不同
- C++:重载运算符.奇怪的类型转换运算符
- 二元运算符重载,隐式类型转换
- 将运算符类型转换为除某些引用之外的任何算术类型
- 通过具有重载运算符函数的构造函数自动进行类型转换
- ostream&运算符<<中的类型转换
- 类型转换为类型&&运算符
- VS 2012中的条件运算符类型转换