gpt4 book ai didi

C++ 无法将输入参数转换为引用

转载 作者:太空狗 更新时间:2023-10-29 20:50:21 25 4
gpt4 key购买 nike

下面是一个产生错误的简单示例 (VS 2019):

  1. E0461 对非常量的引用的初始值必须是左值
  2. C2664“void foo(std::string &)”:无法将参数 1 从“std::string”转换为“std::string &”

    使用命名空间标准;

    void foo(string& input) {
    cout << "Foo is: " << input << endl;
    }

    string getInput() {
    return string("abc");
    }

    int main()
    {
    foo(getInput());
    }

我不明白这个错误。 getInput() 返回一个字符串。为什么不能将该字符串作为引用直接传递给 foo() 函数,就像任何局部变量或成员变量都可以通过引用传递给 foo() 函数一样?正如错误消息所暗示的那样,将字符串参数设置为 const 会使错误消失。为什么会这样?

更新:在考虑了回复和我在下面发布的几个链接之后,我进一步思考了这个问题。我认为这里的核心问题是 getInput() 的返回值是一个临时变量。如果我将 getInput() 的结果复制到局部或全局变量中,然后将其传递给 foo(),就不会出现错误。我认为编译器不“喜欢”通过引用传递存储 getInput() 结果的临时变量,因为临时变量将保持有效多长时间?显然,它必须在 getInput() 返回后立即保持有效,但在那之后多长时间呢?

最佳答案

这是因为 const 引用可以绑定(bind)到左值和右值。这被标记为 const 是有意义的,即使输入是右值,该值也不能更改。如果该值不是 const,则您可以选择在函数内编辑非常量引用。这是没有意义的,因为输入是右值。

关于C++ 无法将输入参数转换为引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55083497/

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