天天看點

Linux程式設計const使用詳細介紹

<a href="http://s4.51cto.com/oss/201710/30/df9f93483afc5a769e7fd6c4cae75ce2.jpg-wh_651x-s_448553340.jpg" target="_blank"></a>

一、const基礎

如果const關鍵字不涉及到指針,我們很好了解,下面是涉及到指針的情況:

int b = 500; 

const int* a = &amp;b; [1] 

int const *a = &amp;b; [2] 

int* const a = &amp;b; [3] 

const int* const a = &amp;b; [4] 

如果你能區分出上述四種情況,那麼,恭喜你,你已經邁出了可喜的一步。不知道,也沒關系,我們可以參考《Effective c++》Item21上的做法,如果const位于星号的左側,則const就是用來修飾指針所指向的變量,即指針指向為常量;如果const位于星号的右側,const就是修飾指針本身,即指針本身是常量。是以,[1]和[2]的情況相同,都是指針所指向的内容為常量(const放在變量聲明符的位置無關),這種情況下不允許對内容進行更改操作,如不能*a = 3 ;[3]為指針本身是常量,而指針所指向的内容不是常量,這種情況下不能對指針本身進行更改操作,如a++是錯誤的;[4]為指針本身和指向的内容均為常量。

另外const 的一些強大的功能在于它在函數聲明中的應用。在一個函數聲明中,const 可以修飾函數的傳回值,或某個參數;對于成員函數,還可以修飾是整個函數。有如下幾種情況,以下會逐漸的說明用法:

A&amp; operator=(const A&amp; a); 

void fun0(const A* a ); 

void fun1( ) const; // fun1( ) 為類成員函數 

const A fun2( ); 

二 const的初始化

先看一下const變量初始化的情況

1) 非指針const常量初始化的情況:

A b; 

const A a = b; 

2) 指針(引用)const常量初始化的情況:

A* d = new A(); 

const A* c = d; 

或者:

const A* c = new A(); 

引用:

A f; 

const A&amp; e = f; // 這樣作e隻能通路聲明為const的函數,而不能通路一般的成員函數; 

[思考1]: 以下的這種指派方法正确嗎?

const A* c=new A(); 

A* e = c; 

[思考2]: 以下的這種指派方法正确嗎?

A* const c = new A();  

A* b = c;  

原文釋出時間為:2017-10-30

本文作者:佚名

本文來自雲栖社群合作夥伴“51CTO”,了解相關資訊可以關注。

繼續閱讀