gpt4 book ai didi

c++ - 为什么要声明/创建一个单独的变量来通过引用调用,而不是仅仅在函数调用中创建一个自动对象?

转载 作者:太空宇宙 更新时间:2023-11-03 10:28:17 24 4
gpt4 key购买 nike

给出:

void foo(std::string &s) { 
...
}

为什么这会导致编译器错误:

foo(std::string("fail"));

这很好:

std::string s("winning");
foo(s);

失败案例的错误是错误:没有匹配函数来调用“foo(std::string)”

在获胜的案例中,我认为编译器无论如何都会优化掉 s。我在这里缺少什么概念?

最佳答案

通过非 const 引用传递用于输出(和 inout)参数。

当您传递一个临时变量时,输出就没有地方可以去,也没有地方可以被调用者检索。所以语言规则不允许这样做。 (有一个异常(exception)——即使在非const 成员函数中,this 也可以绑定(bind)到临时对象)

如果参数仅供输入,则通过const 引用传递。如果参数将所有权转移给函数,则通过右值引用传递。这两个都接受临时对象。

关于c++ - 为什么要声明/创建一个单独的变量来通过引用调用,而不是仅仅在函数调用中创建一个自动对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26221691/

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