2011-03-18 49 views
0

可能重複:
What is the meaning of a const at end of a member function?
about const member function常數函數

我發現一個函數原型爲下:

const ClassA* ClassB::get_value() const 

是什麼上述聲明意味着什麼?我可以更改ClassA對象的成員嗎?

+1

可能重複:http://stackoverflow.com/questions/1966319/about-const-member-function – 2011-03-18 05:04:40

+0

是你的問題,我可以改變一個const對象的成員?我認爲你不是get_value的作者,也不是試圖從函數體內改變ClassA對象。 – grantnz 2011-03-18 05:05:57

回答

1

由函數返回的ClassA的指針被標記const。這意味着你不應該改變它的任何值。

這不會是不可能改值,因爲有不同的方法來獲得const標記身邊,但你顯然不是意味着要改變它。

2

第一個常量表示返回內容爲const A.所以,不,你不能改變它返回什麼(除非你拋棄的常量性,這將給未定義的行爲,如果它返回的對象是一個指針實際上定義爲const,而不是將const指針返回給本身未被定義爲const的對象)。

第二常量意味着get_value不能更改任何在其它的調用(除其他事項外的ClassB的(非變)的狀態,它是傳遞的,所以ClassB::get_value只能調用也const其他成員函數-合格)。

1

是什麼上述聲明意味着什麼?我可以更改ClassA對象的成員嗎?

get_valueClassB一個const成員函數,因此它不能修改的ClassB任何非易變的數據成員的定義內。但它可以但修改ClassA

成員例如下面編譯(泄漏的內存,但在這裏,是不是太大的關注)

struct A{ 

    int x; 
}; 

struct B 
{ 
    const A* get_value() const 
    { 
     A *p= new A; 
     p->x = 12; 
     return p; 
    } 
}; 
+0

@Saurav:這意味着方法get_value()返回的對象(A *)可以修改它的成員x的值。是嗎? – boom 2011-03-18 05:58:56

+0

不,你不能改變函數返回的內容,因爲返回類型是'const ClassA *'而不是'ClassA *' – 2011-03-18 06:00:26

0

get_value()是不修改只讀功能它被調用的對象是ClassB。它返回一個只讀指向一個ClassA對象。你可以通過使用const_cast來拋棄它的常量來修改這個對象指向的對象。但是理想的做法是製作這個對象的一個​​副本並改變它。