【发布时间】:2018-05-31 19:08:04
【问题描述】:
我想知道以下是否有效:
#include <iostream>
#include <vector>
std::vector<int>& getVec()
{
static std::vector<int> vec{1, 2, 3, 4, 5};
return vec;
}
int main()
{
for (const auto& i : getVec())
{
std::cout << "i = " << i << std::endl;
}
return 0;
}
基本上我不确定来自getVec() 的临时文件的生命周期。我已经查看了this post 和this one,但情况有点不同,因为我的函数返回了对static 数据的引用。具体来说,我想知道场景是否违反了规定规则中的以下异常:
- 在函数调用中临时绑定到引用参数 [...]
或者如果这确实是安全代码。我认为这是安全的,但只是想确定一下。
【问题讨论】:
-
这里没有临时向量。您只是在迭代
getVec的vec。 -
好吧,我有点困惑,尽管基于范围的 for 循环可能正在创建对在
getVec中返回的vector的临时引用。感谢您的澄清。如果您愿意,请发布答案,我会将其标记为答案。 -
基于范围的 for 循环基本上只是调用
begin()和end()并扩展至基于迭代器的循环。参见例如here
标签: c++ c++11 for-loop static rvalue-reference