gpt4 book ai didi

c++ - C++中的函数重载和引用传递

转载 作者:搜寻专家 更新时间:2023-10-31 02:07:33 25 4
gpt4 key购买 nike

有人可以向我解释为什么 foo("你好,我是一个引用字符串。");在 main() 中会调用 void foo(const string& s) 而不是其他定义的 foo() 函数?

void foo(string& s)
{
cout << "(foo1): " << s << endl;
s = "Greetings from 'foo1'.";
}
//--------------------------------------------------------------------------
void foo(string* s)
{
cout << "(foo2): " << *s << endl;
*s = "Greetings from 'foo2'.";
}
//-------------------------------------------------------------------------
void foo(const string& s)
{
cout << "(foo3): " << s << endl;
}

最佳答案

std::string 有一个 非显式 构造函数到 const char*

您的匿名临时字符串文字(其类型为const char[N],其中N 是字符串中的字符数,包括末尾的隐式 NUL)在作为函数参数传递时可以衰减const char*

并且允许匿名临时绑定(bind)const引用。

因此,对于您拥有的三个重载,包含 foo3 的重载是可行的,因此在编译时被选中。

(包含 foo1 的函数不可行,因为匿名临时对象不能绑定(bind)到非 const 引用 - 尽管一些早期的编译器允许它出错。 foo2 远非可接受,因为它需要传递指向 std::string 的指针。

研究这里的斜体术语 - 这里发生了很多事情。

关于c++ - C++中的函数重载和引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48497934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com