gpt4 book ai didi

c++ - 如果我不允许分配右值来引用为什么下面的代码片段有效,这在内部是如何工作的?

转载 作者:行者123 更新时间:2023-11-27 23:40:24 25 4
gpt4 key购买 nike

我正在研究模板和 C++ 语法,我注意到当函数定义如下时,您可以通过调用 add(2,3) 简单地通过引用传递:

#include <iostream>
using namespace std;


auto add(const int& lhs, const int& rhs)
{
return lhs + rhs;
}

int main()
{
cout << add(2, 3) << '\n';
getchar();
return 0;
}

为什么这样做是非法的:

int& r = 3;

但是我可以毫无问题地调用 add(2,3),我不是在这两种情况下都做同样的事情,将右值分配给引用吗?

最佳答案

if I am not allowed to assign rvalues to reference why does the following snippet work

因为你错了。您可以使用右值将左值引用初始化为 const。

how does this work?

创建一个临时对象并将引用绑定(bind)到该临时对象。

此外,临时对象的生命周期通常是到完整表达式结束为止,但是当绑定(bind)到一个引用时,该生命周期会延长到引用的生命周期。在这种特殊情况下,引用参数的生命周期不会比函数调用所在的完整表达式更长,因此这条规则并不重要。

How come doing this is illegal:

int& r = 3;

因为 r 不是对 const 的引用。它是对非​​常量的引用。

如果您确实更改了引用的常量性,那么这将是合式的,并且上面段落中的规则将变得相关。

关于c++ - 如果我不允许分配右值来引用为什么下面的代码片段有效,这在内部是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55559563/

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