簡介C++中的const

來源:互聯網
上載者:User

1、const 引用是指向 const 對象的引用:

const int ival = 1024;
const int &refVal = ival; // ok: both reference and object are const
int &ref2 = ival;  // error: non const reference to a const object

可以讀取但不能修改 refVal。同理,用 ival 初始化 ref2 也是不合法的。ref2 是普通的非 const 引用,因此可以用來修改 ref2 指向的對象的值。通過 ref2 對 ival 賦值會導致修改 const 對象的值。為阻止這樣的修改,需要規定將普通的引用綁定到 const 對象是不合法的。

const 引用可以初始化為不同類型的對象或者初始化為右值,如字面值常量:

int i = 42;
// legal for const references only
const int &r = 42;
const int &r2 = r + i;

同樣的初始化對於非 const 引用卻是不合法的,而且會導致編譯時間錯誤。

即:非 const 引用只能綁定到與該引用同類型的對象。而const 引用則可以綁定到不同但相關的類型的對象或綁定到右值。

2、每種容器類型定義了一種名為 const_iterator 的類型,該類型只能用於讀取容器內元素,但不能改變其值。即使用 const_iterator 類型時,我們可以得到一個迭代器,它自身的值可以改變,但不能用來改變其所指向的元素的值。可以對迭代器進行自增以及使用解引用操作符來讀取值,但不能對該元素賦值。

例如,如果text是vector<string> 類型,程式員想要遍曆它,輸出每個元素,可以這樣編寫程式:

// use const_iterator because we won't change the elements
for (vector<string>::const_iterator iter = text.begin();iter != text.end(); ++iter)
cout << *iter << endl; // print each element in text

除了是從迭代器讀取元素值而不是對它進行賦值之外,這個迴圈與普通迴圈相似。由於這裡只需要藉助迭代器進行讀,不需要寫,這裡把iter 定義為const_iterator 類型。當對const_iterator 類型解引用時,返回的是一個const 值。不允許用const_iterator進行賦值

for (vector<string>::const_iterator iter = text.begin();iter != text.end(); ++ iter)
*iter = " ";   // error: *iter is const

總而言之:使用const_iterator類型時,我們可以得到一個迭代器,它自身的值可以改變,但不能用來改變其所指向的元素的值。可以對迭代器進行自增以及使用解引用操作符來讀取值,但不能對該元素賦值。

3、不要把const_iterator對象與const的iterator對象混淆起來。聲明一個const迭代器時,必須初始化迭代器。一旦被初始化後,就不能改變它的值:

vector<int> nums(10); // nums is nonconst
const vector<int>::iterator cit = nums.begin();
*cit = 1;        // ok: cit can change its underlying element
++cit;         // error: can't change the value of cit
即:// an iterator that cannot write elements
vector<int>::const_iterator
// an iterator whose value cannot change
const vector<int>::iterator

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.