【问题标题】:Could somebody explain the functions of a member function with the delaration 'explicit operator const GUID_t&() const'?有人可以用声明'explicit operator const GUID_t&() const'来解释成员函数的功能吗?
【发布时间】:2020-06-06 09:03:42
【问题描述】:

下面代码sn-p中'operator const GUID_t&() const'的作用是什么。

引用自某知名开源项目,所以不怀疑正确性。看起来不像普通的运算符重载,例如:CTest operrator(CTest&&),你可以清楚地知道返回类型。有没有一个术语这种用法?如果能在这个问题上得到一些帮助,我将不胜感激。如果你能举几个这样的例子就更好了。

struct GUID_t{};
struct InstanceHandle_t
{
    explicit operator const GUID_t&() const
    {
        return *reinterpret_cast<const GUID_t*>(this);
    }
}

【问题讨论】:

标签: c++ c++11 operator-overloading overloading c++17


【解决方案1】:

这是一个一般形式的user-defined conversion function

operator T();

这里:

T = const GUID_t&

也就是说,它允许使用运算符主体中定义的操作将InstanceHandle_t 的实例转换为const GUID_t&amp;

附加的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 T(); 的返回类型是什么?
  • @John 这是T,这就是为什么你不需要拼两次。
猜你喜欢
  • 2011-06-04
  • 2011-05-22
  • 2019-04-01
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 2021-02-12
  • 2017-03-19
相关资源
最近更新 更多