gpt4 book ai didi

c++ - 运算符重载 [operator A() const]

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:26 26 4
gpt4 key购买 nike

有一个名为 B 的预定义类,如下所示:

class B
{
protected:
A ins;
public:
void print() {
cout<<"t";
}
operator A() const {
return ins;
}
};

谁能解释一下“operator A() const”这行的含义,以及如何在主函数中使用它来获取“ins”?

最佳答案

这是一个转换运算符,允许将 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 -- 转换没有改变原始值。

在您的代码上下文中,我们可以说:

  1. 一个B对象包含一个隐藏的A对象
  2. 每个 B 都愿意“假装”成 A ...
  3. ...通过返回其中 A 的拷贝

允许:

void f(A an_a) {...}

B my_b;
f(my_b);

请注意,转换运算符返回 ins 的拷贝。根据上下文,您可能希望将其更改为 operator A&() const {...} 以返回引用而不是拷贝(例如,如果 A 是一个昂贵的复制类) .但是,这将允许调用者更改存储在 B 中的 A,这可能不是您想要的。为了防止复制,但不允许更改,您必须返回对 A 的 const 引用。这就是为什么您会经常看到:

operator const A&() const { return ins;}

关于c++ - 运算符重载 [operator A() const],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27149845/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com