在這個問題上,他們說,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
是錯誤的!
您需要處理您的接受率。 – aioobe 2011-06-03 10:54:15
另外,目前還不清楚你的問題是什麼。 – Chowlett 2011-06-03 10:57:13
確實,const int * == int const *而不是int * const是不同的。所以你是對的,最後的對等是錯誤的。 – 2011-06-03 10:58:23