2014-02-21 2 views
0

Я читал на тему Связанные объекты, которая позволяет создавать поддельные свойства для категорий.В чем преимущество «static char const * const» над «static const char» для связанных ключей объекта?

This article предлагает вам определить ключ просто так:

static const char kNumberKey; 

Это выглядит неинициализированным, но работает.

И this article предлагает вам сделать что-то гораздо более сложное:

static char const * const ObjectTagKey = "ObjectTag"; 

Есть преимущество в этой более длинной форме? Я вижу, что он инициализирован. Но почему const * const? И почему работает неинициализированный вариант выше?

+0

Эта строка неверна, поскольку «ObjectTag» представляет собой массив символов (строки), поэтому он должен быть static * char const * const objectTagKey –

ответ

3

В первом примере kNumberKey - это единственный неизменяемый символ с нулевым значением. Так что это не может использоваться непосредственно в качестве ключа (вы должны взять адрес персонажа, например:. &kNumberKey

Во втором примере, ObjectTagKey является немодифицируемым указателем на строку немодифицируемых символов.

Что изменяемый означает в этом контексте Если указатель является изменяемым, вы можете сделать это в вашем коде:

ObjectTagKey = «мой новый ключ»;

Если символы изменяемые, вы можете сделать это:

ObjectTagKey [3] = 'X';

Имея указатель быть немодифицируемыми помогает избежать изменения его случайно, позже в цикле разработки приложения, когда развитие персонала забыл, что ObjectTagKey был использован в первом месте. Такая же логика выполняется для самих символов. Таким образом, это безопаснее с точки зрения программного обеспечения.

Смежные вопросы