7

自分自身に暗黙の変換関数を定義するとします。

#include <iostream>

class Foo {
 public:
  operator Foo() {
    std::cout << "wha??\n";
    return Foo();
  }
};

void f(Foo f) {}

int main() {
  Foo foo;
  f(foo);
}

なぜ私はこれを定義するのでしょうか? 直接書くことはありませんが、私が書いているテンプレート クラスでテンプレートをインスタンス化することで発生する可能性があります。これが発生した場合、変換関数の定義が事実上ノーオペレーションであり、実際に呼び出すことが不可能であることを願っています。

上記のプログラムは何も出力しません (これはすばらしいことです)。この変換関数が実際に呼び出される状況はありますか?

4

1 に答える 1

11

それは正しいですが、n3376 12.3.2/1 により呼び出されることはありません

変換関数は、(cv 修飾されている可能性がある) オブジェクトを (cv 修飾されている可能性がある) 同じオブジェクト型 (またはそれへの参照) に変換するために使用されることはありません。

于 2013-10-16T05:46:53.047 に答える