A const int *
和int *const
是非常不同的。與const std::auto_ptr<int>
與std::auto_ptr<const int>
相似。然而,似乎沒有這樣的區別const std::vector<int>
與std::vector<const int>
(實際上我不確定第二個甚至被允許)。爲什麼是這樣?爲什麼std :: vector將其常量傳遞給包含的對象?
有時我有一個函數,我想傳遞一個向量的引用。該函數不應該修改向量本身(例如,否push_back()
),但它希望修改每個包含的值(比如增加它們)。同樣,我可能想要一個函數只改變向量結構,但不修改任何現有的內容(儘管這很奇怪)。這種事情是可能的std::auto_ptr
(例如),但由於std::vector::front()
(例如)被定義爲
const T &front() const;
T &front();
,而不是僅僅
T &front() const;
有沒有辦法來表達這一點。什麼我想要做
例子:
//create a (non-modifiable) auto_ptr containing a (modifiable) int
const std::auto_ptr<int> a(new int(3));
//this works and makes sense - changing the value pointed to, not the pointer itself
*a = 4;
//this is an error, as it should be
a.reset();
//create a (non-modifiable) vector containing a (modifiable) int
const std::vector<int> v(1, 3);
//this makes sense to me but doesn't work - trying to change the value in the vector, not the vector itself
v.front() = 4;
//this is an error, as it should be
v.clear();
我沒有看到有人提到過這個,但是一個const的指針向量允許你改變指針所指向的對象,並且可以在需要時用作解決方法。 –