在什么情况下会调用类型的转换运算符?

Jar*_*ock 11 c++ operator-overloading

考虑一种类型bar,它具有用户定义的转换运算符,类型为bar:

struct bar
{
  operator bar & ();
  operator const bar & () const;
};
Run Code Online (Sandbox Code Playgroud)

这些转换什么时候应用?而且,如果这些运营商是deleted什么意味着什么呢?这两种功能都有任何有趣的用途吗?

以下程序似乎不适用于任何转换:

#include <iostream>

struct bar
{
  operator bar & ()
  {
    std::cout << "operator bar &()" << std::endl;
    return *this;
  }

  operator const bar & () const
  {
    std::cout << "operator const bar &() const" << std::endl;
    return *this;
  }
};

void foo(bar x)
{
}

int main()
{
  bar x;

  bar y = x;         // copy, no conversion

  y = x;             // assignment, no conversion

  foo(x);            // copy, no conversion

  y = (bar&)x;       // no output

  y = (const bar&)x; // no output

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Che*_*Alf 9

C++11§12.3.2

转换函数从不用于将(可能是cv限定的)对象转换为(可能是cv限定的)相同的对象类型(或对它的引用),转换为该类型的(可能是cv限定的)基类(或引用它)或(可能是cv-qualified)void

  • 谢谢。知道为什么我可以定义这样的函数,如果它们永远不能使用吗? (2认同)