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

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

求解C/C++ 關鍵字const的定義?

求解C/C++ 關鍵字const的定義?

C++ C
Cats萌萌 2021-11-24 15:11:56
(4)對于類的成員函數,若指定其為const 類型,則表明其是一個常函數,不能修改類的成員變量;(5)對于類的成員函數,有時候必須指定其返回值為const 類型,以使得其返回值不為“左值”這兩句話什么意思。
查看完整描述

2 回答

?
MM們

TA貢獻1886條經驗 獲得超2個贊

舉一個例子,可能你會跟明白些。
No.(4)
class A
{
public:
A(int n=0):data(n){}
void SetData( int n )
{
data = n;
}

int GetData() const // const成員函數
{
// 在const成員函數里面【只能取用】成員變量,而【不能修改】該類里面任何的成員變量
// 比如,如下代碼會編譯出錯,
//data = 1; // error C2166: l-value specifies const object
cout << data; // 取用是沒有問題的。
return data;
}
private:
int data;
};
所以,對于一個成員函數,其函數體內的代碼如果只是成員變量,而不會修改任何成員變量,就應該給這個函數加上const,來表達你的這個意圖。防止以后維護人員不小心在這個函數里修改了變量,編譯的時候馬上就會知道了。
通常gettor函數就應該設置成const成員函數。如上的代碼所示。

還有,附加說明一下:通過一個const對象(object)調用其成員函數,那只能調

用const成員函數。如果聲明了一個上面那個類A的const對象,如下:
const A aObj(10); // aObj是一個常量對象
cout << aObj.GetData(); // ok
//aObj.SetData( 11 ); // error,因為SetData不是const成員函數
然而,對于非const對象,卻沒有這個限制。非const對象依然可以調用const成員函數的。

NO.(5)
struct MyData
{
int a;
int b;
int c;
// ...
};

class MyClass
{
public:
void SetInitData()
{
m_Data.a = 1;
m_Data.b = 1;
m_Data.c = 1;
}

const MyData& GeteMyData() const // 這里面有2個const:)。后面的那個
// const的意思,上面說的那個。
{
return m_Data;
}
private:
MyData m_Data;
};

如下使用:
MyClass myObj;
myObj.SetInitData();
//MyData& myData = myObj.GeteMyData(); 這行代碼會編譯不通過的喲
// 給返回類型的數據加上const的引用的意思是,只給你拿去read,但是不允

許你write。
const MyData& myData = myObj.GeteMyData();
//myData.a = 2; // error.嘗試修改,會編譯不通過。
所以第五點的核心意思就是返回一個常量引用,作為只讀數據使用。
注:一般情況下,對于這一條,都會指定const T&(注:引用)。



查看完整回答
反對 回復 2021-11-29
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

一些情況下類中的成員變量需要賦值后不變,所以會定義為常成員變量,如const a;將類的成員函數指定為const 類型如void show() const;于是在函數中,我們可以放心地使用常成員變量和常成員函數,因為在編譯的時候編譯器就會自動檢查這個函數是否有違規改變常變量的值,違規則不會通過編譯。它的作用是對于常變量而言的。
返回值為const的函數例如const int test();會返回一個const int 型的返回值,如重載運算符“=”,const T &operator=(T &t),T d=(a=b+c);d的值也等于b+c,不會等于a的原值。

查看完整回答
反對 回復 2021-11-29
  • 2 回答
  • 0 關注
  • 326 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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