2011-06-03 103 views
-1

在這個問題上,他們說,int * const a = int const * b,對於obj(obj * const a = obj const * b)是否爲true?

What is the difference between const int*, const int * const, and int const *?

const int * == int const * 

確定這是真的

但是當我使用它的對象(在我的情況direct3ddevice和GUI從CEGUI庫對象)

看看這個

void GUI_Menu::Add_Popup(MenuItem const *Parent ,const String &Name) 
{ 
    PopMenu.resize (Popup_Menu_ID+1); 
    PopMenu.at (Popup_Menu_ID) = static_cast <PopupMenu*> (CEGUI::WindowManager::getSingletonPtr()->createWindow ("TaharezLook/PopupMenu" , Name)); 

    Parent->addChildWindow (PopMenu.at (Popup_Menu_ID)); 
    Popup_Menu_ID++ ; 
} 

此代碼將在下面的行編譯錯誤

Parent->addChildWindow (PopMenu.at (Popup_Menu_ID)); 

我將解釋爲什麼這是錯的(在我的觀點),並告訴這是假性還是真性;

菜單項是一類包含數據和功能,這些數據必須需要

如實施例(的setText,顏色,大小....等)更新;

現在,如果我創建像這樣的新MenuItem對象;

MenuItem const *Obj 

是什麼意思是... OK

這意味着我們不能改變數據obj的內部,但我們可以改變在世界其他地址

值是恆定的但地址不是這樣,如果我們想改變顏色,大小等等,我們不能和我們得到錯誤...............這是真的;

另一方面,我們有相同的代碼,但改變了常數。

void GUI_Menu::Add_Popup(MenuItem *const Parent ,const String &Name) 
{ 
    PopMenu.resize (Popup_Menu_ID+1); 
    PopMenu.at (Popup_Menu_ID) = static_cast <PopupMenu*> (CEGUI::WindowManager::getSingletonPtr()->createWindow ("TaharezLook/PopupMenu" , Name)); 

    Parent->addChildWindow (PopMenu.at (Popup_Menu_ID)); 
    Popup_Menu_ID++ ; 
} 

我們更改以下行

MenuItem *const Parent 

新線意味着我們可以改變的價值,但沒有改變的地址,以便

obj *const a = obj const *b 

是錯誤的!

+4

您需要處理您的接受率。 – aioobe 2011-06-03 10:54:15

+2

另外,目前還不清楚你的問題是什麼。 – Chowlett 2011-06-03 10:57:13

+1

確實,const int * == int const *而不是int * const是不同的。所以你是對的,最後的對等是錯誤的。 – 2011-06-03 10:58:23

回答

4

您的初始前提不正確。 int *const aint const *b不同。第一個是一個指向非常量int的常量指針。第二個是一個指向常量int的非常量指針。

3

如果const關鍵字指針符號左側,那麼他們是等價的:

const int* pA == int const* pB 

如果const是右邊這是一個不同的事情。在第一種情況下,數據是恆定的,而指針不是,後者是相反的:指針是恆定的,而數據不是。

看看this tutorial,它應該澄清你。

相關問題