[英]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 是一个 class 包含数据和 function,这些数据必须在需要时更新
例如(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
是错的 !!!
你最初的前提是不正确的。 int *const a
与int const *b
的类型不同。 第一个是指向非常量 int 的常量指针。 第二个是指向常量 int 的非常量指针。
如果const
关键字在指针符号的左边,那么它们是等价的:
const int* pA == int const* pB
如果const
在右边,那是另一回事。 在第一种情况下,数据是恒定的而指针不是,在后者中则相反:指针是恒定的而数据不是。
看看这个教程,它应该会让你明白。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.