[英]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.