結論:範囲チェックを入れると、毎回オーバーヘッドが発生し、遅くなるから。
提案:もし範囲チェックをしたい場合、.at(i)
でアクセスをすれば、範囲外アクセスで例外を投げる。速度を優先したい場合は[i]
を使う。
設計上の理由:ストラウストラップ先生は「ある分野での完全性は、その分野への特化を意味する(プログラミング言語 C++ 第4版 p19)」と述べている。C++は幅広いシステム開発での優れたツールとなることを目指しているため、言語としては手段を提供し、選択権をユーザー側に持たせている。
Rustの場合:C++と比較的近いRustの場合はどうしているかというと、デフォルトで範囲チェックを行っているようだ。ただし、優秀なLLVMがビルド時に最適化してチェックを省略してくれたり、unsafe
を使って自己責任でチェックを省くことができる。