假设我为自己定义了一个隐式转换函数:
#include <iostream>
class Foo {
public:
operator Foo() {
std::cout << "wha??\n";
return Foo();
}
};
void f(Foo f) {}
int main() {
Foo foo;
f(foo);
}
为什么要定义这个?好吧,我永远不会直接写它,但它可能发生在我写的模板类中的模板实例化。如果发生这种情况,我希望定义转换函数实际上是无操作,实际调用是不可能的。
上面的程序没有打印(这很棒)。是否存在实际调用此转换函数的任何情况?
答案 0 :(得分:11)
这是正确的,但永远不会打电话,因为n3376 12.3.2 / 1
一个 转换函数永远不会用于将(可能是cv限定的)对象转换为(可能是cv-qualified) 相同的对象类型(或对它的引用)