gpt4 book ai didi

c++ - 出于什么原因需要将 const 左值引用绑定(bind)到右值?

转载 作者:太空狗 更新时间:2023-10-29 20:33:00 28 4
gpt4 key购买 nike

以下行为是违法的:constexpr int& v = 1; 因为 v 无法在编译时解析,这是有道理的。

现在令我惊讶的是 const int& v = 1; 是合法的。

但是我看不出这与 const int v = 1; 有何不同。

在什么情况下有必要将 const 左值引用绑定(bind)到右值

最佳答案

constexpr int& vconst int& v 不是一回事。 constexpr int& v 表示创建对 int 的引用,该引用是一个 constexpr。您不能将其绑定(bind)到临时对象,因为不允许将对可变对象的左值引用绑定(bind)到临时对象。

const int& v 另一方面意味着创建对 const int 的引用。这允许绑定(bind)到临时文件,因为您无法修改临时文件的状态。

In what case would it be necessary to bind a const lvalue reference to an rvalue?

在 C++11 之前,这是捕获对临时对象的引用的唯一方法。例如

std::vector<int> make_vec(int size) { return std::vector<int>(size); }

const std::vector<int>& foo = make_vec(1000);

在上面的代码中,忽略任何类型的优化,这是访问 make_vec 返回的 vector 而不复制它的唯一方法。这曾经/现在非常重要,因为它有助于防止 C++ 的值语义自然创建的大量拷贝。

在 C++11 之后就不再需要了,因为我们现在有右值引用,允许您将引用绑定(bind)到临时对象,并且您可以修改它,因为它们通常不是 const

关于c++ - 出于什么原因需要将 const 左值引用绑定(bind)到右值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58172058/

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