在c ++中使用operator关键字的意思是什么?

use*_*615 6 c++ operator-overloading stream visual-c++

这适用于使用C++编写的应用程序.在什么情况下,这一行对你们任何人都有意义,在struct定义的上下文中(stream是类型的成员变量FILE*):

operator FILE*(){return stream;}
Run Code Online (Sandbox Code Playgroud)

我一直在使用调试器,试图理解它,但我似乎无法激活这一行代码.我从未以这种方式遇到过运算符重载关键字.这行代码可以做什么?

jag*_*ire 9

这是一个隐式转换运算符.

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

class Foo{
public:
    operator Bar(); // allow implicit conversion of Foo objects to Bar
};
Run Code Online (Sandbox Code Playgroud)

此运算符的更常见实例是将对象转换为布尔值作为有效性检查.这可以通过标准库的流和智能指针来看到.

您应该注意语法的变体,这会阻止现有转换,并使转换显式:

class Foo{
public:
    explicit operator Bar(); // allow explicit conversion of Foo objects to Bar
};
Run Code Online (Sandbox Code Playgroud)

当您意外地A将可以转换为类型的类型提供B给仅接受的函数时,这可以防止被编译程序咬住B.当然,这可能是你想要的,但并非总是如此,他们决定将其添加到语言中,以帮助需要明确转换的人.

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