2014-02-21 55 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是擺在首位的用途。對於角色本身也適用同樣的邏輯。所以從軟件維護的角度來看更安全。