繁体   English   中英

int *const a = int const *b,对于 obj ( obj *const a = obj const *b ) 是真的吗?

[英]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 aint const *b的类型不同。 第一个是指向非常量 int 的常量指针。 第二个是指向常量 int 的非常量指针。

如果const关键字在指针符号的左边,那么它们是等价的:

const int* pA == int const* pB

如果const在右边,那是另一回事。 在第一种情况下,数据是恒定的而指针不是,在后者中则相反:指针是恒定的而数据不是。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM