在 c++ 中使用 operator 关键字在这里意味着什么?
What could the use of the operator keyword in c++ mean here?
这适用于用 C++ 编写的应用程序。在 struct
定义的上下文中(stream
是类型 FILE*
的成员变量):
operator FILE*(){return stream;}
我一直在使用调试器,试图理解它,但我似乎无法激活那行代码。我从未以这种方式遇到过 operator overload 关键字。这行代码能做什么?
这是 implicit conversion operator。
隐式转换运算符允许不会以其他方式隐式转换为目标类型的类型这样做的能力。它们具有以下语法,其中 Foo
是要隐式转换的对象的 class,Bar
是目标 class:
class Foo{
public:
operator Bar(); // allow implicit conversion of Foo objects to Bar
};
此运算符更常见的实例是将对象转换为布尔值作为有效性检查。这可以通过标准库的流和智能指针看到。
您应该注意语法的变化,它阻止了现有的转换,而是使转换显式:
class Foo{
public:
explicit operator Bar(); // allow explicit conversion of Foo objects to Bar
};
这可以防止在您不小心将可以转换为类型 B
的类型 A
提供给仅接受 B
的函数时被编译程序咬住。当然, 可以 成为您想要的,但并非总是如此,他们决定将其添加到语言中以帮助需要显式转换的人们。
使用显式转换运算符,您可以通过构造(在目标类型的对象的构造中使用它)或通过显式转换从原始对象创建对象:B{A}
这适用于用 C++ 编写的应用程序。在 struct
定义的上下文中(stream
是类型 FILE*
的成员变量):
operator FILE*(){return stream;}
我一直在使用调试器,试图理解它,但我似乎无法激活那行代码。我从未以这种方式遇到过 operator overload 关键字。这行代码能做什么?
这是 implicit conversion operator。
隐式转换运算符允许不会以其他方式隐式转换为目标类型的类型这样做的能力。它们具有以下语法,其中 Foo
是要隐式转换的对象的 class,Bar
是目标 class:
class Foo{
public:
operator Bar(); // allow implicit conversion of Foo objects to Bar
};
此运算符更常见的实例是将对象转换为布尔值作为有效性检查。这可以通过标准库的流和智能指针看到。
您应该注意语法的变化,它阻止了现有的转换,而是使转换显式:
class Foo{
public:
explicit operator Bar(); // allow explicit conversion of Foo objects to Bar
};
这可以防止在您不小心将可以转换为类型 B
的类型 A
提供给仅接受 B
的函数时被编译程序咬住。当然, 可以 成为您想要的,但并非总是如此,他们决定将其添加到语言中以帮助需要显式转换的人们。
使用显式转换运算符,您可以通过构造(在目标类型的对象的构造中使用它)或通过显式转换从原始对象创建对象:B{A}