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 回答