我想在某个循环中保存输入,创建对可能不存在的数组元素的引用。这样做合法吗?一个简短的例子:
#include<vector>
#include<iostream>
#include<initializer_list>
using namespace std;
int main(void){
vector<int> nn={0,1,2,3,4};
for(size_t i=0; i<10; i++){
int& n(nn[i]); // this is just to save typing, and is not used if invalid
if(i<nn.size()) cout<<n<<endl;
}
};
https://ideone.com/nJGKdW可以很好地编译和运行代码(我在本地尝试使用 g++ 和 clang++),但我不确定我是否可以依靠它。
PS: gcc 都不会抱怨,即使编译+运行时使用-Wall
and -g
。
编辑 2:讨论集中在数组索引上。实际使用的代码std::list
片段如下所示:
std::list<int> l;
// the list contains something or not, don't know yet
const int& i(*l.begin());
if(!l.empty()) /* use i here */ ;
编辑3:我正在做的合法解决方案是使用迭代器:
std::list<int> l;
const std::list<int>::iterator I(l.begin()); // if empty, I==l.end()
if(!l.empty()) /* use (*I) here */ ;