对于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 obj int tru 是否 对于      更新时间:2023-10-16

在这个问题中,他们说

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在右边,那就另当别论了。在第一种情况下,数据是常数,而指针不是,在后者中则相反:指针是常数,但数据不是。

看看这个教程,它应该会让你明白。