1樓:
這樣解釋一下
int cc=5;
int* dd=&cc;
int* ee=&cc;
int * const &aa=dd;
aa 是 常指標,不允許 再指向別處,定義時初始化為 dd 的引用因為aa是常指標
所以 aa = ee;//會報錯
*aa = 1;//允許
int cc=5;
int* dd=&cc;
int* ee=&cc;
const int * &aa=dd;
aa 是 指向常量的指標,不允許通過aa修改aa所指變數的值,定義時初始化為 dd 的引用
aa = ee;//允許
*aa = 1;//會報錯
定義指標時
* 在左邊 const 在右邊,指標本身是常,const 在左邊 * 在右邊,指標所指變數是常
2樓:匿名使用者
int cc = 5;
int const i = 20;
int change = 10;
int * const aa = &cc;// aa的值不能修改,即它永遠指向 cc
int const * aa = &i;// aa指向乙個 const 值,不能修改它指向的物件的值
int * const &aa = &cc;// aa是引用,其它與第一條類似
int const * &aa;// aa是引用,其它與第二條類似
在 const 遇到 * 時,const 在 * 之前表示 const 型別,const 在 * 之後表示 const 指標
3樓:
也許你知道通常乙個變數可以將其位址賦給指標常量吧,比如:
int a = 7;
const int *b = &a;
這樣的**是能編譯通過並順利執行的。通常這樣的**被用在函式形參初始化上,由於可能函式屬於const函式,不允許在函式中改變其值,所以,將形參定義為const int*,它既可以獲得int的位址,也可以獲得const int的位址~
你的問題跟我上面所說的類似,由於它在某些地方有一定用處,因此編譯器對類似這樣的情況語法限制比較寬鬆~它屬於ansi標準的一部分,因此這種寬鬆不是什麼bug
4樓:科技鳥
這裡aa是常量指標,不可以修改它的初始位址,但是初始化總要吧,初始化無所謂改變位址,所以是可以的。
c++中的const的用法
5樓:傅夏生
個人的一些筆記,希望可以幫助你
const 的使用
const經常用來修飾乙個值不能改變的量,安全,並且能消除儲存操作
const的幾種用法:
(1) 說明值常量
(2) 說明指標
(3) 說明函式引數及其返回值
(4) 說明類的常量和成員函式
const 說明值常量
值常量的說明一般放在標頭檔案或者檔案的開始部分,也可以放在類中進行說明
(1) 說明符號常量,表明符號代表的是乙個常量,語法:
《型別》const《常量名》=《表示式》,《常量名》=《表示式》……
例如:double const pi=3.14; const double pi=3.14;
(2) 說明陣列常量,語法格式:
《型別》const《陣列名》[大小]=;
const型別》 《陣列名》[大小]=;
(3) 說明物件常量,語法格式:
《類名》const《物件名》;
const 《類名》 《物件名》;
(4) 說明引用常量
(5) const與c語言中的#define的差別
無參巨集不是符號常量,沒有資料型別,沒有值,在記憶體中不分配位址。它在預處理時做巨集替換,不可能做型別檢查。
const定義的常量是符號常量,有資料型別,也有值,且其值不可改變,在記憶體中有位址,編譯時做型別檢查。
const和指標
const和指標的三種經典組合
(1) 指向常量的指標——const int *p;
(2) 常指標——char *const pc=』a』;
(3) 指向常量的常指標——const char *const pc=』a』
指向常量的指標(指標指向乙個不可變數)
指標在指向有乙個常量後,不能通過指標修改這個常量,但是可以指向乙個新的常量,例如:
const char *pc=」abcd」;
pc[3]=』a』;不合法,企圖修改原來指向的常量
pc=「wert」;合法指向另外乙個常量
常指標要把指標變數中的值(也就是位址)宣告為常量,採用以下語法:
《類那些》*const《指標名》[=《初值》;]
這樣定義的指標變數中存放的指標是個常量,稱為常指標。定義後,該指標指向固定的記憶體單元,不能再指向其他記憶體單元,通過它可以修改所指單元裡存放的內容。例如:
char *const pc=」abcd」;
pc[3]=』a』;合法,指標指向的物件可以修改
pc=」qwer」;不可以,指標的指向不可以修改
指向常量的常指標
指標變數中存放的指標本身和指標所指向的物件都是不可以改變的。
例如:const char *const pc=」asdf」;
pc[3]=』a』;不合法,不能改變指標所指物件的值
pc=」qwer」;不合法,不能改變指標的指向
const說明函式引數和返回值
用const限定函式引數和返回值,是const最重要的用法。用const修飾函式引數意味著傳過來的實參在函式中是不能被修改的。一般情況下不需要,但是在用指標和引用傳值的場合,為避免實參被修改,就用const修飾,更安全。
修飾函式的返回值,意味著該返回值不能被修改。如果傳值並返回位址,const將保證該位址上的內容不會被改變。這就意味著該函式不能作為左值使用,在這種情況下,const通常也是與引用和指標一起使用的。
類中的const
1. 常成員的函式
2. 常資料成員
3. 常物件
6樓:惠智傑
我來說一下,具體原因應該是這個,常變數在定義的時候必須初始化,所以當你在a.cpp中定義extern const double pi=3.14; b.
pp中extern const double pi;可以通過編譯執行。因為當編譯系統發現a.cpp中的全域性常變數時,就知道它pi是常量,而換過來的時候,在a.
cpp中定義const double pi=3.14; b.pp中extern const double pi;編譯系統在編譯a.
cpp是沒有問題的,但到了b.cpp中就會發現,有乙個外部常量是沒有初始化的,而常量是不能在宣告後再進行定義的,所以編譯系統會認為找不到它的定義,所以就出錯。
對於extern "c"主要是因為c和c++編譯器不同,它們對相同的函式名編譯後生成的相同的標示不同,故而在引用c的庫檔案時必須使用extern 「c」告訴編譯器,它是c的函式,按c的規則編譯。通常我們使用的標準標頭檔案已被處理過。 貌似沒有用於常量的宣告。
7樓:97樂於助人
返回const,則呼叫時也必須宣告為const,防止返回的指標內容被修改。
8樓:匿名使用者
1,希望成員函式不改變成員的時候:比如:int a::print const {}
2,不希望指標去改變指向的記憶體空間:比如: const int* p;
3,不希望指標的指向被改變:比如: int *const p;
4,還有就是引用。。
9樓:秒懂百科
const:乙個c語言的關鍵字
10樓:匿名使用者
如果const用於定義乙個非指標的普通變數,就是定義了乙個常變數,這個變數以後的值在生命期內是不能改變的,因此也必須對該變數進行初始化,在c++中要在類的初始化列表中初始化。
如果const用於定義乙個指標變數,不同的寫法有不同的意思。例如const char *p和char* const p 前者表示p指向的內容是不能夠改變的,後者是指p本身的值是不能夠改變的。
如果用於修飾函式返回值,效果和修飾變數一樣。
const修飾類的成員函式,則該成員函式不能修改類中任何非const成員函式。一般寫在函式的最後來修飾。
const修飾類物件表示該物件為常量物件,在物件的生命期中其中的任何成員都不能被修改。
關於const用法還是比較複雜的,還有很多用法,我也沒有總結詳盡,以後遇到可以自己寫程式測試。
c++關於 引數裡面用const和&的問題。
11樓:97樂於助人
返回const,則呼叫時也必須宣告為const,防止返回的指標內容被修改。
12樓:旅春冬
這個常引用的作用是不能改變x,不是不能改變引用指向。
13樓:我已經匿名了
引用變數只能初始化一次,即繫結被引用的物件(變數);而const是常量限制,是指不允許修改變數的值,兩碼事。
本例中,&使得x作為實參的引用變數(不會進行拷貝初始化,從而省時省記憶體);const限制x的值不能在本函式中被修改。在函式體內任何企圖修改x值的行為都會被編譯器檢查到並報錯。你去掉const,就可在函式體內可以修改x的值(比如 x=x+ "hello";)。
c++中const的作用
14樓:謝興橋
影響是沒有,就是讓這個ch指標必須指向s->data(),不能指向其它的變數或函式
15樓:覺心
加了const指這是乙個常量指標,不加就是乙個簡單的指標。你要區別指標常量和常量指標。
16樓:秒懂百科
const:乙個c語言的關鍵字
c++裡面的const問題
17樓:天雨下凡
int x=5; //x並不是const變數,所以可以改變它的值
的值不能改變,且不能通過p改變指向處的值
//*p=7;是錯誤的,假設y也是int型變數,p=&y;也是錯誤的,但是x=7;是正確的
c++ 關於const的乙個問題
18樓:七彩虹科技****
使用const限定的成員函式不能改變類的成員變數的值,主要是為了保護成員變數不在該函式中被更改。 例如,有乙個成員變數int a,獲得成員變數a的函式 int void get_a()const; 這裡const表示get_a這個函式不能夠更改類的成員變數的值,但是可以使用,所以這時如果get_a的實現是: int void get_a() 這樣就不會出錯,而如果是:
int void get_a() 這樣就會報錯,因為函式改變了成員變數的值。 const限定函式的作用是在大型工程中保證封裝性,不能隨意暴露成員變數,成員變數的更改必須保證在特定函式,使用特定方法,只有這樣,才能保證軟體的安全性。
c 中Const用法?什麼時候需要用const?Const放在類成員函式後有什麼用?Con
醉酒逝流年 簡單的說,const代表初始化外的時候都不能修改值函式的引數寫const主要是為了防止你改變引數內容比如 void f cosnt int a 你在f的函式體裡修改了a就報錯 const在類成員函式後面表示這個函式不能用類裡面沒有const修飾的變數 c 中的類成員函式後面的const是...
C 中的string str問題
都不是。string是個類,string str,是定義乙個名叫str的字串物件。str內部儲存著字串的內容,通過str.c str 可以獲取這個字串的首位址。string str abc 這也不是將str賦值為 abc 的首位址,而是使用 abc 為值來初始化乙個string類。建議先補一下c 物...
C 中的建構函式問題,c 建構函式的問題
建構函式一般用來對類中的資料成員進行初始化工作,但並不是要對全部資料初始化,你只需要選擇自己需要的資料進行賦值即可。其實這一點從預設的建構函式也能看出來 當你沒有顯示的寫乙個建構函式的時候,編譯器會為你提供乙個預設的建構函式,它沒有引數,只有乙個空語句,也就是說它沒有對任何資料成員進行初始化。由於構...