C 中函式後面跟const是什麼意思

2021-06-15 01:32:20 字數 2266 閱讀 4590

問題:c++:void display( ) const 中的const是什麼意思?

簡答:意思是除了表明了mutable的成員變數以外

該類的其他的成員變數在這個函式內一律不能修改。

詳細:加const表明,該函式只能是唯讀的,不能修改私有變數的值。加強安全性。

給隱含的this指標加const,表示這個this指向的東西是const的,也就是說這個函式中無法改動資料成員了。const是一種保證,告訴你這 個成員不會改變物件的狀態。

類的成員函式後面加 const,表明這個函式不會對這個類物件的資料成員(準確地說是非靜態資料成員)作任何改變。

在設計類的時候,乙個原則就是對於不改變資料成員的成員函式都要在後面加 const,而對於改變資料成員的成員函式不能加 const。所以 const 關鍵字對成員函式的行為作了更加明確的限定:有 const 修飾的成員函式(指 const 放在函式引數表的後面,而不是在函式前面或者參數列內),只能讀取資料成員,不能改變資料成員;沒有 const 修飾的成員函式,對資料成員則是可讀可寫的。

除此之外,在類的成員函式後面加 const 還有什麼好處呢?那就是常量(即 const)物件可以呼叫 const 成員函式,而不能呼叫非const修飾的函式。正如非const型別的資料可以給const型別的變數賦值一樣,反之則不成立。

請看下面乙個完整的例子,然後我再作一些說明。

code:

[copy to clipboard]

#include

#include

using namespace std; 

class student  

student( const string& nm, int sc = 0 ) 

: name( nm ), score( sc ) {} 

void set_student( const string& nm, int sc = 0 ) 

const string& get_name() const 

int get_score() const 

private: 

string name; 

int score; 

}; // output student's name and score 

void output_student( const student& student ) 

int main() 

設 計了乙個類 student,資料成員有 name 和 score,有兩個建構函式,有乙個設定成員資料函式 set_student(),各有乙個取得 name 和 score 的函式 get_name() 和 get_score()。請注意 get_name() 和 get_score() 後面都加了 const,而 set_student() 後面沒有(也不能有const)。

首先說一點題外話,為什麼 get_name() 前面也加 const。如果沒有前後兩個 const 的話,get_name() 返回的是對私有資料成員 name 的引用,所以通過這個引用可以改變私有成員 name 的值,如

code:

[copy to clipboard]

student stu( "wang", 85 );

stu.get_name() = "li";即把 name 由原來的 "wang" 變成了 "li",而這不是我們希望的發生的。所以在 get_name() 前面加 const 避免這種情況的發生。

那麼,get_name() 和 get_score() 這兩個後面應該加 const的成員函式,如果沒有 const 修飾的話可不可以呢?回答是可以!但是這樣做的代價是:const物件將不能再呼叫這兩個非const成員函式了。如

code:

[copy to clipboard]

const string& get_name(); // 這兩個函式都應該設成 const 型

int get_score();

void output_student( const student& student ) 

由 於引數student表示的是乙個對const student型物件的引用,所以 student 不能呼叫非const成員函式如 set_student()。如果 get_name() 和 get_score() 成員函式也變成非const型,那麼上面的 student.get_name() 和 student.get_score() 的使用就是非法的,這樣就會給我們處理問題造成困難。

因此,我們沒有理由反對使用const,該加const時就應該加上const,這樣使成員函式除了非const的物件之外,const物件也能夠呼叫 它。

C 中函式後面跟const是什麼意思

問題 c void display const 中的const是什麼意思?簡答 意思是除了表明了mutable的成員變數以外 該類的其他的成員變數在這個函式內一律不能修改。詳細 加const表明,該函式只能是唯讀的,不能修改私有變數的值。加強安全性。給隱含的this指標加const,表示這個this...

C 中函式後面跟const

問題 c void display const 中的const是什麼意思?簡答 意思是除了表明了mutable的成員變數以外 該類的其他的成員變數在這個函式內一律不能修改。詳細 加const表明,該函式只能是唯讀的,不能修改私有變數的值。加強安全性。給隱含的this指標加const,表示這個this...

C 在函式宣告時,後面跟個const是什麼意思?

c 在函式宣告時,後面跟個const是什麼意思?如 有下面的函式宣告 double d const 其中的 const 有什麼用?是什麼意思?請舉例說明下什麼時候用這種形式?謝謝!weixin weibo qzone lyq boy 瀏覽 11596 次 2012 12 24 13 51 2015 ...