c++ - 将调用什么重载的 C++ 函数?

标签 c++ overloading

<分区>

这里是主题的主题:

#include <string>
#include <iostream>

void test(bool val)
{
    std::cout << "bool" << std::endl;
}

void test(std::string val)
{
    std::cout << "std::string" << std::endl;
}

int main(int argc, char *argv[])
{
    test("hello");
    return 0;
}

程序的输出是bool。为什么选择 bool 变体?

最佳答案

要调用 bool 重载需要进行以下转换:

const char[6] ---> const char* ---> bool

要调用 std::string 重载需要进行以下转换:

const char[6] ---> const char* ---> std::string

这里涉及到用户自定义的转换(使用std::string的转换构造函数)。任何没有用户定义转换的转换序列都优于具有用户定义转换的序列。

When comparing the basic forms of implicit conversion sequences (as defined in 13.3.3.1):

  • a standard conversion sequence (13.3.3.1.1) is a better conversion sequence than a user-defined conversion sequence or an ellipsis conversion sequence, and
  • [...]

标准转换序列是仅涉及标准转换的序列。用户定义的转换序列是涉及单个用户定义的转换的序列。

关于c++ - 将调用什么重载的 C++ 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16319813/

相关文章:

c++ - C/C++ 拼图 : To print values from 1. .15 15..1 带有一个 for 循环

c++ - OpenGL 透明效果在 Meego 上显示的很糟糕

C++ 运算符使用友元函数重载。尝试添加多个对象失败

c++ - 如何重载 += 运算符以返回字符串?

java - 如何处理2个几乎相同的构造函数

c++ - const 如何使函数重载?

c++ - 子类中的方法不会被父类中的虚函数调用

c++ - 由于模板基类,从不完整类型初始化静态 constexpr

c++ - C++ 中的哈希函数 SHA1

java - Java中的构造函数重载 - 最佳实践