const成員函式為什麼可以呼叫指標成員變數的非const函式

2022-06-13 07:55:03 字數 2933 閱讀 8095

1樓:幻夢·人生

類a裡的成員,有m_pvt

const修飾函式之後,意思是不能夠修改m_pvt也就是不能將他指向其他的位置

m_pvt->push_back(1);

這行語句修改的是m_pvt裡面所存的位址所指向的空間並不修改m_pvt,所以不違反const原則就好像你宣告乙個int * const p = a;

你不能修改p的值,但是你可以修改*p的值。

2樓:齊霸王在江湖夢

const修飾函式之後,意思是不能夠修改m_pvt也就是不能將他指向其他的位置

m_pvt->push_back(1);

這行語句修改的是m_pvt裡面所存的位址所指向的空間並不修改m_pvt,所以不違反const原則就好像你宣告乙個int * const p = a;

你不能修改p的值,但是你可以修改*p的值。

3樓:senlern林

我記得應該是非const物件無法呼叫const函式吧,因為const函式說明不會修改呼叫它的物件裡面的東西。至於const函式呼叫什麼樣的函式沒影響吧~你再試試,自己做做實驗。希望您能幫到你~

4樓:匿名使用者

void f() const;

const 保證會不修改 m_pvt,但是*m_pvt就管不了了。*m_pvt不屬於a類成員

說出const型成員函式能不能呼叫非const成員函式。

5樓:

const函式中呼叫的非const函式可以修改類成員,

這樣你的const函式不就間接修改類成員了嗎?

c++明確規定const函式不可以修改類成員。

為什麼const物件只能呼叫const成員函式,而不能呼叫非const成員函式

6樓:仙戈雅

因為常物件那麼就意味著該物件的資料成員是不能修改的(除非使用mutable修飾的可變成員外),而那些非const成員函式存在修改資料成員的風險。so,c++要求只能呼叫const成員函式。

7樓:物理公司的

怎麼在const成員函式裡面呼叫非const成員函

8樓:

const函式與非const函式的呼叫規則

const物件預設呼叫const成員函式,非const物件預設呼叫非const成員函式;

若非const物件想呼叫const成員函式,則需要顯示的轉化,例如(const student&)obj.getage();

若const物件想呼叫非const成員函式,同理進行強制型別轉換const_cast < student&>(constobj).getage();(注意constobj一定要加括號)

當類中只有一種函式存在的情況

- 非const物件可以呼叫const成員函式或者非const成員函式

- const物件只能呼叫const成員函式,若直接呼叫非const成員函式編譯器會報錯。

不能通過指標變數呼叫物件中的非const成員?

9樓:風若遠去何人留

可以啊不管什麼成員 都可以用指標呼叫的。

可以說除了位域 任何的變數 任何的空間

都可以通過指標去呼叫。

只不過 要合法的呼叫成員變數

私有的 只能在成員函式中呼叫

public的 在任何函式中 都可以通過指標呼叫的。

在乙個類中,const成員函式可以呼叫另乙個const函式?非(const)成員函式之間...

10樓:匿名使用者

在類中,函式和函式之間的呼叫沒有什麼限制啊!即使是常量成員函式。你迷惑的應該是物件之間吧?

「不能從 const 成員函式返回指向類物件的普通引用。const 成員函式只能返回 *this 作為乙個 const 引用。」 ,「const 物件、指向 const 物件的指標或引用只能用於呼叫其const 成員函式,如果嘗試用它們來呼叫非 const 成員函式,則是錯誤的。

」也就是說常量成員函式對const物件、指向 const 物件的指標或引用有影響,函式之間沒有區別。

c++,const物件的成員不可修改,但const物件通過指標維護的物件卻可以修改,什麼意思?望高手予以指點!

11樓:匿名使用者

首先,const物件只能呼叫const成員函式是因為const函式不會改變成員物件,這點和const物件的本意是相同的,其他函式有可能會改變成員變數,所以編譯器拒絕通過呼叫非const函式

這裡的轉換是說,我另建立了乙個指標,而不是原來的東西,簡單的來說就是乙個copy,去掉了const屬性(當然真實情況下並不是真正的copy)

我覺得這裡用c風格的轉換,並不是很合適。如果換個風格可能更有助於你的理解

void test2()const

也就是說,轉換成了乙個非const的成員,c的轉換許可權太大,直接就把所有的東西都轉換了..這裡其實只轉換了const屬性,const_cast的功能在這裡就是:把常量指標被轉化成非常量的指標,並且仍然指向原來的物件。

12樓:匿名使用者

你所說的那個轉換是將指標指向當前類,這樣在靜態函式中就可以呼叫當前類的成員函式了。

13樓:匿名使用者

foo *temp = (foo*) this是將這個物件本身的記憶體位址賦給物件temp,*是取位址的意思。

還有const函式不可以呼叫非const函式,一定要通過物件才行。

14樓:匿名使用者

我知道了,謝謝提問者

C 引數中不加const為什麼會出錯

過載二維運算子的函式引數需要const,因為函式要保證實參的值不能被修改,需要加const限制,沒有為什麼,就是需要。另外你寫的函式宣告也有問題,應該是這樣 使用成員函式過載加號運算子 使用友元函式過載減號運算子 我個人習慣將 符號靠近變數名,而不是型別名,寫乙個例子你就明白了int p1,p2 p...

c中定義的類裡面的成員函式可以直接使用嗎?就

沒有物件的時候要訪問類成員函式的話,只能訪問靜態成員函式。例如 class a 這樣可以在主函式裡直接用 a abc 這樣的語句進行呼叫。如果是static函式,可以用類名 abc 來呼叫 如果不是static函式,不可以直接呼叫 不可以,唯一的例外是宣告成static 的成員函式可以 includ...

Python裡為什麼函式可以返回函式內部定義的函式

python中一切皆物件 2.函式是第一類物件 3.函式物件vs函式呼叫 4.閉包legb法則 所謂閉包,就是將組成函式的語句和這些語句的執行環境打包在一起時,得到的物件 python 裡為什麼函式可以返回乙個函式內部定義的函式 不是簡單地返回函式。至少在python裡,def定義的函式和lambd...