C++,隐式转换/构造函数是如何确定的?

标签 c++ constructor implicit implicit-conversion

C++ 如何确定几层深度的对象的隐式转换/构造? 例如:

struct A {};
struct B: A {};
struct C { operator B() { return B(); } };

void f(A a) {}

int main(void)
{
    f(C());
}

它是否创建所有可能转换的树并选择适当的终端?还有别的事吗?谢谢

最佳答案

f() 的调用需要两次转换,一次用户定义的转换(CB)和一次内置转换转换(派生到基数:BA)。当需要零个或一个用户定义的转换时,具有不匹配参数的调用会成功。如果不同的转换(内置或用户定义的)会成功,那么,如果所有可能的方式在所需的转换数量/类型上都相同,则调用是不明确的,并且编译器需要发出诊断。

标准没有指定编译器如何实现这一点。

关于C++,隐式转换/构造函数是如何确定的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2443479/

相关文章:

c++ - 对于多态类的对象,对象的地址和指向对象的指针是否相同?

java - 变量多态性的初始化

scala - 使用动态/具体类型初始化类型变量

c++ - 在 lua 中使用 require 后全局变量丢失

c++ - 如何在 C++ 中使用 gtest/gmock 为调用另一个全局函数的全局函数编写单元测试?

C++ 列表显示表中的最后 3 个项目

java - 从构造函数分配 Final 变量 |方法不允许。为什么?

scala - 如何在集合中进行隐式转换?

scala 宏生成隐式

c++ std::string.find 在 boolean 表达式中返回意外结果