亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

c++中const是怎么使用的?

c++中const是怎么使用的?

C++
Cats萌萌 2019-03-10 08:08:08
看下代碼,為什么這樣比較規范呢?什么情況下使用它比較好,我想養成一個良好的編程習慣
查看完整描述

3 回答

?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

首先是const的用處,它可以用來修飾一個變量或者類的成員函數, 修飾變量時表示變量是不可修改的,修飾類的成員函數時,表示調用這個函數,不會修改類的內部成員


指針和 const 指針的功能區別: const指針表示指針指向的對象是不可修改的, 而普通指針可以,

另外,普通的指針可以當做const指針的來用,如下:

假設現在有兩個指針 Tdate *p1,  const Tdata *p2

第一個函數定義為 someFunc(T *) , 那么 someFunc(p1)是可以的,someFunc(p2)是不行的,因為const指針不能轉換成非const指針

第二個函數定義為someFunc(const T *) 那么someFunc(p1)和someFunc(p2)都是可以的,p1可以當做const T *來用


someFunc2的解釋

假設現有對象 Tdata t;

someFunc2(Tdata re),形參是一個對象,由于c/c++是傳值調用,所以每次調用這個someFunc2(t)時,都會構造一個新的Tdata形參re,并把t的內容復制到re中去,這樣是一種效率的浪費,解決辦法就是改成指針someFunc2(Tdata *re) 或者引用 someFunc2(Tdata &re)


不使用普通引用而是是用const引用的好處在于:

  1. const引用使用要求比較低,  如前面所述, 普通引用和const引用都可以調用這個函數

  2. const明確告訴使用者,該函數不會修改re的內容,也就是t的內容,而使用非const引用會誤導使用者以為該函數要修改t的內容



查看完整回答
反對 回復 2019-03-20
?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

你好,首先你應當明白引用時C++區別于C的一點。但是在Lippleman的<深度探索C++的對象模型>中曾經指出,引用的實現說到底還是采用指針實現的,但是它比指針有自己的優勢。然后再Lippleman的<C++primer>中他指出現代C++程序偏向于使用引用,而不是指針,但是并不是說指針不再使用。
C++中的const關鍵字是指出對象時一個常量,是不允許變動它在內存當中的值的。但是還有很多點是需要注意的。
1.指向const對象的指針 const double *ptr表明ptr指向一個double類型的對象,你可以賦值給ptr一個常量或者不是常量。比如:
double temp = 3.0;const double *ptr = &temp; //此時你不能通過ptr來更改temp的值,也就是說下面的語句是錯誤的:*ptr = 4.0;但是temp本身并不是const變量,下面的語句就是對的:temp = 4.0; //注意const對象一定要在對象的初始化時賦值.就是說下面的語句是錯誤的:
double temp = 3.0;const double* ptr; ptr = &temp; //error

2.const指針 ,和一般的const對象一樣,說明指針本身是const,是不允許指向其他的對象的;比如下面的語句就是錯的:
double temp = 3.0;double* const ptr = &temp; double err = 4.0;ptr = &err; //注意const對象的初始化時一定需要賦值.
但是你可以使用ptr來更改temp的值,就是說下面的語句是對的:*ptr = 10.0;

對于你上面的例子中,首先你應該知道C++的標識符的命名本身就應該包含足夠的信息,而不是隨便的a,b,等沒有用的名字。函數print()就是說該函數是用來打印的,并不會更改對象的內容,所以你將函數的形參設為const,是為了當你在函數的實現中一不小心更改了對象的內容,編譯器會及時的報錯,從而能避免以后不需要的麻煩。
在標準的C中,函數形參的const說明是會被編譯器直接忽略的就是說你寫成const,但是你還是可以在函數的實現中更改對象的內容,但是你的const說明符告訴函數的使用者該專遞給函數一個const對象,但是編譯器并不負責對你的更改操作給出error提示的.在C++中,確實會給出提示的。
所以當你的函數并不會改變對象的內容時,將其定義為const對象回事很好的編程習慣的。

查看完整回答
反對 回復 2019-03-20
  • 3 回答
  • 0 關注
  • 1091 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號