在这个问题中他们说过
What is the difference between const int*, const int * const, and int const *?
const int * == int const *
确定这是真的
但是当我在对象中使用它时(在我的例子中是来自CEGUI库的direct3ddevice和GUI对象)
看看这个
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));
我会解释为什么这是错的(在我看来),并告诉这是错误的还是真的;
MenuItem是一个包含数据和函数的类,这些数据必须在所需的
中更新作为例子(settext,color,size ....等);
现在如果我像这样创建新的MenuItem Obj;
MenuItem const *Obj
是什么意思......好的
这意味着我们无法更改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
错了!
答案 0 :(得分:4)
您的初始前提是不正确的。 int *const a
与int const *b
的类型不同。第一个是指向非常量int的常量指针。第二个是指向常量int的非常量指针。
答案 1 :(得分:3)
如果const
关键字位于指针符号的左侧,则它们是等效的:
const int* pA == int const* pB
如果const
位于右侧,那就是另一回事了。在第一种情况下,数据是常量而指针不是,后者则相反:指针是常数而数据不是。
看看this tutorial,它应该澄清你。