4
爲什麼STL容器定義訪問器的const和非const版本?爲什麼有const和非const訪問?
定義const T& at(unsigned int i) const
和T& at(unsigned int)
而不僅僅是非const版本有什麼好處?
爲什麼STL容器定義訪問器的const和非const版本?爲什麼有const和非const訪問?
定義const T& at(unsigned int i) const
和T& at(unsigned int)
而不僅僅是非const版本有什麼好處?
因爲無法在const
矢量對象上調用at
。
如果你只有非const
版本,以下內容:
const std::vector<int> x(10);
x.at(0);
不會編譯。使用const
版本可以實現這一點,並且同時防止您實際更改at
返回的內容 - 這是合同規定的,因爲矢量爲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
的可能的複製[與常量和沒有的功能相同 - 什麼時候和爲什麼(https://stackoverflow.com/questions/27825443/same-function-with-const-and-without-when-and -爲什麼) –