gpt4 book ai didi

c++ - 右值引用可以作为 const 引用传递吗?

转载 作者:行者123 更新时间:2023-11-28 01:17:13 25 4
gpt4 key购买 nike

考虑以下示例 struct:

struct A {
int i;

void init(const A &a)
{
this->i = a.i;
}

A(int i)
{
this->i = i;
}

A(const A &a) = delete;
A &operator=(const A &a) = delete;

A(A &&a)
{
init(a); // Is this allowed?
}

A &operator=(A &&a)
{
init(a); // Is this allowed?
return *this;
}
};

右值引用 A &&a 被传递给接受 const A &a 的函数,即常量左值引用。这是否允许并导致 C++ 中明确定义的行为?

最佳答案

是的,这是允许的。

请注意,表达式 a 的值类别是左值,即使 a 声明的类型是右值引用。

此外,如果您使用 std::movea 创建右值,您的代码仍然是合式的,因为右值可以绑定(bind)到 const 左值引用:

init(std::move(a)); // std::move(a) is an rvalue (to be precise, xvalue), but still OK

关于c++ - 右值引用可以作为 const 引用传递吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58293007/

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