我们知道下面的代码是重载了 * 和 & 运算符
X& operator*() const
{
return *this;
}
X* operator&() const
{
return this;
}
但我不知道下面的代码是什么意思?(可以通过build)好像是用来获取X的指针的。
operator X*() const
{
return this;
}
我们知道下面的代码是重载了 * 和 & 运算符
X& operator*() const
{
return *this;
}
X* operator&() const
{
return this;
}
但我不知道下面的代码是什么意思?(可以通过build)好像是用来获取X的指针的。
operator X*() const
{
return this;
}
这就是所谓的用户自定义转换,或 UDC。它们允许您通过构造函数或特殊转换函数指定到其他类型的转换。
语法如下所示:
operator <some_type_here>();
所以你的特殊情况是类型的转换运算符X*
。
在编写这些代码时,您应该记住一些事情:
编译器一次只能使用 UDC 隐式转换单个对象,因此链接隐式转换不起作用:
class A
{
int x;
public:
operator int() { return x; };
};
class B
{
A y;
public:
operator A() { return y; };
};
int main ()
{
B obj_b;
int i = obj_b;//will fail, because it requires two implicit conversions: A->B->int
int j = A(obj_b);//will work, because the A->B conversion is explicit, and only B->int is implicit.
}
派生类中的转换函数不会隐藏基类中的转换函数,除非它们转换为相同的类型。
通过构造函数进行转换时,只能使用默认转换。例如:
class A
{
A(){}
A(int){}
}
int main()
{
A obj1 = 15.6;//will work, because float->int is a standart conversion
A obj2 = "Hello world!";//will not work, you'll have to define a cunstructor that takes a string.
}
operator X*() const
{
return this;
}
Implicit conversion operator
键入X*
。这是用户定义的转换。阅读12.3
标准以获取更多信息。从 BoostCon 谈话中重载解引用运算符的相关奇怪方法