STL コンテナーが const および非 const バージョンのアクセサーを定義するのはなぜですか?
非 const バージョンだけでなく、const T& at(unsigned int i) const定義する利点は何ですか?T& at(unsigned int)
ベクターオブジェクトatを呼び出すことができないためです。const
非バージョンしかない場合はconst、次のようになります。
const std::vector<int> x(10);
x.at(0);
コンパイルしません。バージョンを持つことconstでこれが可能になり、同時にat返されるものを実際に変更することができなくなります。これは契約によるものです。これはベクトルがconst.
非constバージョンは非constオブジェクトで呼び出すことができ、返された要素を変更できます。これは、ベクトルが const ではないため有効です。
const std::vector<int> x(10);
std::vector<int> y(10);
int z = x.at(0); //calls const version - is valid
x.at(0) = 10; //calls const version, returns const reference, invalid
z = y.at(0); //calls non-const version - is valid
y.at(0) = 10; //calls non-const version, returns non-const reference
//is valid