它的不尋常申報const和可變的變量,就像這樣:
std::vector<int>& VectorHolder::getVector() {
return myVector;
}
const std::vector<int>& VectorHolder::getVector() const {
return myVector;
}
與你的程序潛在的問題是,你從返回一個const方法的非const引用。
std::vector<int>& VectorHolder::getVector() const {
return myVector; // << error: return mutable reference from const method
}
所以你把它const的使用這種形式:
const std::vector<int>& VectorHolder::getVector() const {
return myVector; // << ok
}
並且當這是在非const的方法或客戶持有一個非const引用,則可以合法使用的非const的方法:
std::vector<int>& VectorHolder::getVector() {
return myVector; // << ok
}
最後,你可以返回一個值(在某些情況下):
std::vector<int> VectorHolder::getVector() const {
return myVector; // << ok
}
,因爲該副本不需要突變且不會暴露內部數據。
所以你最終會經常聲明這兩個變體。
宣佈兩者的結果是:
VectorHolder m;
const VectorHolder c;
m.getVector().size(); // << ok
c.getVector().size(); // << ok - no mutation
m.getVector().push_back(a); // << ok
c.getVector().push_back(a); // << error: attempt to mutate const reference because the const vector is returned
所以它均能工作(除了方法冗餘)出來。
以這種方式則不可能從那裏返回它的代碼後修改返回向量? – arjacsoh
@arjacsoh:這取決於。查看編輯。 – Nawaz