gpt4 book ai didi

c++ - 在 c++ 中使用 operator 关键字在这里意味着什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:04 24 4
gpt4 key购买 nike

这适用于用 C++ 编写的应用程序。在什么情况下这一行对你们有意义,在 struct 定义的上下文中(streamFILE* 类型的成员变量>):

operator FILE*(){return stream;}

我一直在使用调试器,试图理解它,但我似乎无法激活那行代码。我从未以这种方式遇到过 operator overload 关键字。这行代码能做什么?

最佳答案

这是一个 implicit conversion operator .

隐式转换运算符允许一个不会以其他方式隐式转换为目标类型的类型,这样做的能力。它们具有以下语法,其中 Foo 是要隐式转换的对象的类,Bar 是目标类:

class Foo{
public:
operator Bar(); // allow implicit conversion of Foo objects to Bar
};

此运算符更常见的实例是将对象转换为 bool 值作为有效性检查。这可以从标准库的流和智能指针中看出。

您应该注意语法的变化,它阻止了现有的转换,而是使转换显式:

class Foo{
public:
explicit operator Bar(); // allow explicit conversion of Foo objects to Bar
};

当您不小心将可以转换为类型 B 的类型 A 提供给仅接受 B< 的函数时,这可以防止被编译程序咬住。当然,这可以是您想要的,但并非总是如此,他们决定将其添加到语言中以帮助需要显式转换的人。

使用显式转换运算符,您可以通过构造(在目标类型的对象的构造中使用它)或通过显式转换从原始对象创建对象:B{A}

关于c++ - 在 c++ 中使用 operator 关键字在这里意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33288759/

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