存在しない可能性のある配列要素への参照を作成して、ループでの入力を節約したいと思います。そうすることは合法ですか?簡単な例:
#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 も clang も文句を言いませ-Wall
ん-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 */ ;
EDIT 3:私がしていたことに対する法的解決策は、イテレータを使用することです:
std::list<int> l;
const std::list<int>::iterator I(l.begin()); // if empty, I==l.end()
if(!l.empty()) /* use (*I) here */ ;