我有具有以下构造函数的旧代码。
CAgs (int ar, bool isReady);
CAgs (int ar, const char* options[][2] = NULL);
它正在编译,但是不会是模棱两可的调用吗?如果我调用
CAgs (10, 0);
,将调用哪个构造函数?此行为编译器依赖吗?
最佳答案
Nb。我将您的问题解释为“为什么编译?如果我像这样称呼它,那不是歧义吗?”
之所以调用is ambiguous,是因为调用每个构造函数都需要使用CAgs (10, 0);
进行隐式转换
引用一些资料:
§4.10.1 for const char* options[][2]
类型
bool
类型为4.12.1
代码肯定会编译,因为参数是两个不同且有效的类型,如果传递不需要模棱两可的隐式转换的东西,它将正常工作。但这并不意味着CAgs (10, 0);
并不歧义
作为一个不相关的小注释,指针的默认值可以正常工作:CAgs (10);
。对于任何其他非零类型也是如此(将选择bool
构造函数)。