对于obj(obj*const a=obj const*b),int*const a=int const*b是否为tru
int *const a = int const *b , is that true for obj ( obj *const a = obj const *b )?
在这个问题中,他们说
const int*、const int*const和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是一个包含数据和函数的类,这些数据必须在需要的中更新
例如(设置文本、颜色、大小等);
现在,如果我像这样创建新的MenuItem Obj;
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
错了!!!
您的初始前提不正确。CCD_ 1与CCD_ 2不是同一类型。第一个是指向非常量int的常量指针。第二个是指向常量int的非常量指针。
如果const
关键字在指针符号的左侧,则它们等效:
const int* pA == int const* pB
如果const
在右边,那就另当别论了。在第一种情况下,数据是常数,而指针不是,在后者中则相反:指针是常数,但数据不是。
看看这个教程,它应该会让你明白。