地址消毒剂在抱怨。
struct X
{
iterator begin();
iterator end();
};
X foo();
const X& bar(const X& x)
{
return x;
}
BOOST_FOREACH(const auto& xitem, bar(foo()))
{
//use xitem
}
地址消毒剂在抱怨。
struct X
{
iterator begin();
iterator end();
};
X foo();
const X& bar(const X& x)
{
return x;
}
BOOST_FOREACH(const auto& xitem, bar(foo()))
{
//use xitem
}
是的,这会导致未定义的行为。
当您将 const 引用绑定到临时对象时,临时对象的生命周期会扩展到绑定引用的范围。在您的情况下,这是 function bar
。因此,您无法在bar
函数退出后访问临时文件。
编辑:
在标准中查找它,实际上临时的生命周期被扩展到包含bar
. 因此,这取决于BOOST_FOREACH
您的代码是否为 UB 是如何实现的。
从 N3337 12.2.5
临时绑定到函数调用 (5.2.2) 中的引用参数将一直持续到包含调用的完整表达式完成为止。
是的。FOREACH 发生在对 foo 调用创建的结构的引用上,并在传递给 bar() 后超出范围