是否会调用隐式转换函数来自我调用?

时间:2013-10-16 05:41:48

标签: c++

假设我为自己定义了一个隐式转换函数:

#include <iostream>

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

void f(Foo f) {}

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

为什么要定义这个?好吧,我永远不会直接写它,但它可能发生在我写的模板类中的模板实例化。如果发生这种情况,我希望定义转换函数实际上是无操作,实际调用是不可能的。

上面的程序没有打印(这很棒)。是否存在实际调用此转换函数的任何情况?

1 个答案:

答案 0 :(得分:11)

这是正确的,但永远不会打电话,因为n3376 12.3.2 / 1

一个 转换函数永远不会用于将(可能是cv限定的)对象转换为(可能是cv-qualified) 相同的对象类型(或对它的引用)