可能重複:
What is the meaning of a const at end of a member function?
about const member function常數函數
我發現一個函數原型爲下:
const ClassA* ClassB::get_value() const
是什麼上述聲明意味着什麼?我可以更改ClassA對象的成員嗎?
可能重複:
What is the meaning of a const at end of a member function?
about const member function常數函數
我發現一個函數原型爲下:
const ClassA* ClassB::get_value() const
是什麼上述聲明意味着什麼?我可以更改ClassA對象的成員嗎?
號
由函數返回的ClassA的指針被標記const
。這意味着你不應該改變它的任何值。
這不會是不可能改值,因爲有不同的方法來獲得const
標記身邊,但你顯然不是意味着要改變它。
第一個常量表示返回內容爲const A.所以,不,你不能改變它返回什麼(除非你拋棄的常量性,這將給未定義的行爲,如果它返回的對象是一個指針實際上定義爲const
,而不是將const
指針返回給本身未被定義爲const
的對象)。
第二常量意味着get_value
不能更改任何在其它的調用(除其他事項外的ClassB
的(非變)的狀態,它是傳遞的,所以ClassB::get_value
只能調用也const
其他成員函數-合格)。
是什麼上述聲明意味着什麼?我可以更改ClassA對象的成員嗎?
get_value
是ClassB
一個const成員函數,因此它不能修改的ClassB
任何非易變的數據成員的定義內。但它可以但修改ClassA
成員例如下面編譯(泄漏的內存,但在這裏,是不是太大的關注)
struct A{
int x;
};
struct B
{
const A* get_value() const
{
A *p= new A;
p->x = 12;
return p;
}
};
@Saurav:這意味着方法get_value()返回的對象(A *)可以修改它的成員x的值。是嗎? – boom 2011-03-18 05:58:56
不,你不能改變函數返回的內容,因爲返回類型是'const ClassA *'而不是'ClassA *' – 2011-03-18 06:00:26
get_value()
是不修改只讀功能它被調用的對象是ClassB
。它返回一個只讀指向一個ClassA
對象。你可以通過使用const_cast
來拋棄它的常量來修改這個對象指向的對象。但是理想的做法是製作這個對象的一個副本並改變它。
可能重複:http://stackoverflow.com/questions/1966319/about-const-member-function – 2011-03-18 05:04:40
是你的問題,我可以改變一個const對象的成員?我認爲你不是get_value的作者,也不是試圖從函數體內改變ClassA對象。 – grantnz 2011-03-18 05:05:57