有人可以用声明 'explicit operator const GUID_t&() const' 来解释成员函数的功能吗?
Could somebody explain the functions of a member function with the delaration 'explicit operator const GUID_t&() const'?
下面代码段中 'operator const GUID_t&() const' 的作用是什么。
引用自一个著名的开源项目,所以我不怀疑 correctness.It 看起来不像普通的运算符重载,例如:CTest operrator(CTest&&)
,你可以清楚地知道 return type.Is 有这种用法的术语吗?如果能对此提供一些帮助,我将不胜感激 question.It 如果您能举几个这样的例子就更好了。
struct GUID_t{};
struct InstanceHandle_t
{
explicit operator const GUID_t&() const
{
return *reinterpret_cast<const GUID_t*>(this);
}
}
这是一个user-defined conversion function的一般形式:
operator T();
这里:
T = const GUID_t&
也就是说,它允许使用运算符主体中定义的操作将 InstanceHandle_t
的实例转换为 const GUID_t&
。
额外的 explicit
说明符是可选的,它可以防止隐式转换,即编译器只会在显式上下文中触发此转换,例如:
InstanceHandle_t handler;
GUID_t guid(handler);
static_cast<GUID_t>(handler);
const GUID_t& ref(handler);
所有三个语句都导致执行:
*reinterpret_cast<const GUID_t*>(&handler)
和其他算子一样,直接调用也是可以的:
handler.operator const GUID_t&();
下面代码段中 'operator const GUID_t&() const' 的作用是什么。
引用自一个著名的开源项目,所以我不怀疑 correctness.It 看起来不像普通的运算符重载,例如:CTest operrator(CTest&&)
,你可以清楚地知道 return type.Is 有这种用法的术语吗?如果能对此提供一些帮助,我将不胜感激 question.It 如果您能举几个这样的例子就更好了。
struct GUID_t{};
struct InstanceHandle_t
{
explicit operator const GUID_t&() const
{
return *reinterpret_cast<const GUID_t*>(this);
}
}
这是一个user-defined conversion function的一般形式:
operator T();
这里:
T = const GUID_t&
也就是说,它允许使用运算符主体中定义的操作将 InstanceHandle_t
的实例转换为 const GUID_t&
。
额外的 explicit
说明符是可选的,它可以防止隐式转换,即编译器只会在显式上下文中触发此转换,例如:
InstanceHandle_t handler;
GUID_t guid(handler);
static_cast<GUID_t>(handler);
const GUID_t& ref(handler);
所有三个语句都导致执行:
*reinterpret_cast<const GUID_t*>(&handler)
和其他算子一样,直接调用也是可以的:
handler.operator const GUID_t&();