[英]Does this cause undefined behavior?
地址消毒器在抱怨。
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
}
是。 FOREACH发生在对由foo调用创建的结构的引用上,并且在传递给bar()之后超出范围
是的,这会导致未定义的行为。
当您将const引用绑定到临时对象时,该临时对象的生存期将扩展到绑定引用的范围。 您的情况是功能bar
。 因此, bar
功能退出后,您将无法访问临时文件。
编辑:
在标准中查找它,实际上临时项的生存期扩展到包含bar
的完整表达式。 因此,无论您的代码是否为UB,这取决于如何实现BOOST_FOREACH
。
从N3337 12.2.5起
在函数调用(5.2.2)中,绑定到参考参数的临时绑定将一直持续到包含该调用的完整表达式完成为止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.