是否会调用 self 的隐式转换函数

Will an Implicit conversion function to self ever get called?

本文关键字:转换 函数 调用 self 是否      更新时间:2023-10-16

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

#include <iostream>
class Foo {
 public:
  operator Foo() {
    std::cout << "wha??n";
    return Foo();
  }
};
void f(Foo f) {}
int main() {
  Foo foo;
  f(foo);
}

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

上面的程序不打印任何内容(这很棒)。 在什么情况下实际调用此转换函数?

这是正确的,但永远不会调用,由于 n3376 12.3.2/1

一个转换函数从不用于将(可能符合 CV 标准)对象转换为(可能符合 CV 标准)相同的对象类型(或对其的引用)