2014-02-21 54 views
0

我读到关联对象的主题,它允许您为类别创建假属性。“静态字符常量*常量”优于“静态常量字符”的关联对象键的优点是什么?

This article建议你简单地定义的关键是这样的:

static const char kNumberKey; 

它看起来未初始化,但工程。

而且this article建议你做一些事情要复杂得多:

static char const * const ObjectTagKey = "ObjectTag"; 

是否有优势,在这个较长的形式?我可以看到它已经初始化。但为什么const * const?为什么上面未初始化的变体工作?

+0

此行不正确,因为“ObjectTag”是字符串(字符串)的数组,所以它应该是静态的* char const * const objectTagKey –

回答

3

在第一个例子中,kNumberKey是一个零值的单个不可修改字符。因此,它不是直接可用的密钥(你将不得不采取的字符地址,像这样:&kNumberKey

在第二个例子中,ObjectTagKey是不可修改的指针指向的不可修改的字符的字符串。

什么修改在这方面的意思是如果指针修改的,你可以在你的代码做到这一点:?

ObjectTagKey = “我的新钥匙”;

如果字符是可修改的,则可以做到这一点:

ObjectTagKey [3] = 'X';

具有指针是不可修改的,有助于避免意外地改变它,后来在应用程序的开发周期,当开发人员忘记ObjectTagKey是摆在首位的用途。对于角色本身也适用同样的逻辑。所以从软件维护的角度来看更安全。