gpt4 book ai didi

c++ - BOOST_FOREACH 迭代右值容器有非 const ref 值错误

转载 作者:搜寻专家 更新时间:2023-10-31 00:14:41 26 4
gpt4 key购买 nike

我正在使用 g++ 4.4.7 20120313

class obj { int a; }

std::list<obj> list;

BOOST_FOREACH(obj& v, list) { } // ok
BOOST_FOREACH(const obj& v, list) { } // ok

std::list<obj> getlist() { ... }

BOOST_FOREACH(obj& v, getlist()) { } // error: invalid initialization of reference of type 'obj&' from expression of type 'const obj'
BOOST_FOREACH(const obj& v, getlist()) {} // ok

为什么会报错?为什么我应该使用 const obj& 而不是 obj& ?

最佳答案

getlist() 返回一个临时对象。通常,临时变量在它出现的表达式末尾消失(其生命周期结束)。临时变量可以作为标准中的特例绑定(bind)到 const 引用,但不能绑定(bind)到非常量引用。

要回答原因,请考虑将临时对象绑定(bind)到非常量引用的含义:当临时对象的生命周期结束时,通过引用所做的任何更改都将丢失。通过禁止这样做,C++ 在这里保护了您。

Sutter 在 one of his older GOTWs 中对此进行了介绍.

关于c++ - BOOST_FOREACH 迭代右值容器有非 const ref 值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22218873/

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