在下面有一个名为B的预定义类:
class B
{
protected:
A ins;
public:
void print() {
cout<<"t";
}
operator A() const {
return ins;
}
};
任何人都可以解释一下这条线的含义&#34;运算符A()const&#34;以及如何使用它来获取&#34; ins&#34;在主要功能?
答案 0 :(得分:1)
这是一个转换运算符,允许将B对象转换为(强制转换为)A对象。
让我们分解operator A() const {...}
它等同于A convert_to_A() { return ins; }
之类的东西,除了通过命名它operator A
,编译器可以自动使用它。
operator A
表示这是一个转换为A类的运算符。
()
:转化运算符始终是不带参数的函数。
const
因为将B投射到A 不得更改B 的值。例如:
double d = 3.14;
int i = d;
这里d
已被(隐含)强制转换为int。 i
的值为3,但d
仍为3.14 - 转换不更改原始值。
在代码的上下文中,我们可以说:
允许:
void f(A an_a) {...}
B my_b;
f(my_b);
请注意,转换运算符会返回 ins
的副本。根据上下文,您可能希望将其更改为operator A&() const {...}
以返回引用而不是副本(例如,如果A是要复制的昂贵类)。但是,这将允许调用者更改存储在B中的A,这可能不是您想要的。要防止复制,但不允许更改,您必须将const引用返回给A.这就是您经常看到的原因:
operator const A&() const { return ins;}
答案 1 :(得分:0)
这意味着您可以将B实例转换为A并获取B的ins成员。
B b;
A a;
a = (A)b;
// a is now equal to the member `ins` of b. Depending on the implementation of operator = of class A, it was probably copied into the a variable.