При каких обстоятельствах будет вызываться оператор преобразования типа в сам себя?

Рассмотрим тип bar , который имеет определяемые пользователем операторы преобразования в ссылки типа bar :

struct bar
{
  operator bar & ();
  operator const bar & () const;
};

Когда будут применяться эти преобразования? Более того, что это означает, если эти операторы были удалены ? Есть ли какое-нибудь интересное использование той или иной функции?

Следующая программа, похоже, не применяет ни одно из преобразований:

#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;
}
11
задан Jared Hoberock 2 December 2011 в 01:27
поделиться