我有具有以下构造函数的旧代码。

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构造函数)。

07-27 13:43