Интерпретация определения типа C++ указателей константы

Чтобы сохранить значения в общих настройках:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("Name","Harneet");
editor.apply();

Чтобы получить значения из общих настроек:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String name = preferences.getString("Name", "");
if(!name.equalsIgnoreCase(""))
{
    name = name + "  Sethi";  /* Edit the value here*/
}
21
задан jasonline 12 February 2010 в 07:27
поделиться

2 ответа

Нет смысла анализировать поведение typedef на основе текстовой замены. Typedef-имена - это не макросы, они не заменяются текстуально.

Как вы сами отметили,

typedef CHARS const CPTR;

это то же самое, что

typedef const CHARS CPTR;

Это так по той же причине, по которой

typedef const int CI;

имеет то же значение, что и

typedef int const CI;

Typedef-имена не определяют новые типы (только псевдонимы к существующим), но они "атомарны" в том смысле, что любые классификаторы (например, const) применяются на самом верхнем уровне, то есть они применяются к всему типу, скрытому за typedef-именем. Определив имя типа, вы не можете "внедрить" в него классификатор так, чтобы он изменил более глубокие уровни типа.

36
ответ дан 29 November 2019 в 20:06
поделиться

Typedef - это не простая текстовая подстановка.

typedef const CHARS CPTR;

Означает, что «тип CPTR будет постоянным символом CHARS». Но CHARS - это тип указателя на символ, поэтому здесь говорится, что «тип CPTR будет константным указателем на тип символа». Это не соответствует тому, что вы видите, когда делаете простую замену.

Другими словами,

typedef char * CHARS;

не совпадает с

#define CHARS char *

Синтаксис typedef подобен объявлению переменной, за исключением того, что вместо объявления имя цели должно быть переменной, оно объявляет его как имя нового типа, которое можно использовать для объявления переменных типа, которые переменная была бы без typedef.

Вот простой процесс выяснения того, что объявляет typedef:

  1. Удалите ключевое слово typedef. Теперь у вас будет объявление переменной.

    const CHARS CPTR;
    
  2. Выясните, к какому типу относится эта переменная (некоторые компиляторы имеют оператор typeof(), который делает именно это и очень полезен). Вызовите этот тип T. В этом случае постоянный указатель на (непостоянный) символ.

  3. Заменить typedef. Теперь вы объявляете новый тип (CPTR), который в точности совпадает с типом T, постоянный указатель на (не константный) символ.

13
ответ дан 29 November 2019 в 20:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: