Причины использовать константы NSString по перечислениям?

Новичок

Вводный, никакой предыдущий опыт программирования

  • Краткая информация C++ * (Stanley Lippman, JosГ©e Lajoie и Barbara E. Moo) ( обновленный для C++ 11 ) Прибывающий в 1k страницы, это - очень полное введение в C++, который покрывает примерно все на языке в очень доступном формате и в мельчайших подробностях. Пятый выпуск (выпущенный 16 августа 2012) покрывает C++ 11. [Обзор]

  • Программирование: Принципы и Практика Используя C++ (Bjarne Stroustrup, 2-й Выпуск - 25 мая 2014) ( обновленный для C++ 11/C++ 14 ) введение в программирование использования C++ создателем языка. Хорошее чтение, которое не принимает предыдущего опыта программирования, но не является только для новичков.

*, чтобы Не быть перепутанным с Краткая информация C++ Плюс [1 169] (Stephen Prata), со значительно менее благоприятным обзор .

Вводный, с предыдущим опытом программирования

  • Тур А по C++ (Bjarne Stroustrup) ( 2-й выпуск для C++ 17 ) “tour” является быстрым (приблизительно 180 страниц и 14 главами) учебный обзор всего стандартного C++ (язык и стандартная библиотека, и использующий C++ 11 ) на умеренно высоком уровне для людей, которые уже знают C++ или по крайней мере являются опытными программистами. Эта книга является расширенной версией материала, который составляет Главы 2-5 Языка Программирования на C++, 4-го выпуска.

  • Ускоренный C++ (Andrew Koenig и Barbara Moo, 1-й Выпуск - 24 августа 2000) Это в основном покрывает ту же землю как Краткая информация C++, но делает так на одной четверти ее пространства. Это в основном, потому что это не пытается быть введением в [1 173] программирование , но введение в [1 174] C++ для людей, которые ранее запрограммировали на некотором другом языке. Это имеет более крутую кривую обучения, но, для тех, кто может справиться с этим, это - очень компактное введение в язык. (Исторически, это привнесло нечто новое, будучи книгой первого новичка для использования современного подхода к обучению языка.) Несмотря на это, C++, который это преподает, является чисто C++ 98. [Обзор]

Лучшие практики

  • Эффективный C++ (Scott Meyers, 3-й Выпуск - 22 мая 2005) Это было записано с целью того, чтобы быть лучшими вторыми книжными программистами на C++, должен читать, и он успешно выполнился. Предыдущие издания были нацелены на программистов, происходящих из C, третий выпуск изменяет это и предназначается для программистов, происходящих из языков как Java. Это представляет ~50 легких, чтобы помнить эмпирических правил наряду с их объяснением в очень доступном (и приятный) стиль. Для C++ 11 и C++ 14 примеры и несколько проблем устарели, и Эффективный современный C++ должен быть предпочтен. [Обзор]

  • Эффективный современный C++ (Scott Meyers) Это - в основном новая версия [1 177] Эффективный C++ , нацеленный на программистов на C++, делающих переход от C++ 03 к C++ 11 и C++ 14.

  • Эффективный (Scott Meyers) STL Это имеет целью делать то же к части стандартной библиотеки, происходящей из STL, что Эффективный C++ сделал на язык в целом: Это представляет эмпирические правила наряду с их объяснением. [Обзор]

Промежуточное звено

  • Более эффективный C++ (Scott Meyers) Еще больше эмпирических правил, чем [1 181] Эффективный C++ . Не столь важный как те в первой книге, но все еще хороший для знания.

  • Исключительный C++ (Herb Sutter), Представленный как ряд загадок, это имеет одно из лучших и полных обсуждений надлежащей безопасности управления ресурсами и исключения в C++ посредством Приобретением ресурса является инициализации (RAII) в дополнение к всестороннему освещению множества других тем включая pimpl идиому, поиск имени, хороший дизайн класса и модель памяти C++. [Обзор]

  • Более исключительный C++ (Herb Sutter) Затрагивает дополнительные темы безопасности исключения, не затронутые в [1 184] Исключительный C++ , в дополнение к обсуждению эффективного объектно-ориентированного программирования в C++ и корректного использования STL. [Обзор]

  • Исключительный Стиль C++ (Herb Sutter) Обсуждает универсальное программирование, оптимизацию и управление ресурсами; эта книга также имеет превосходную выставку того, как написать модульный код в C++ при помощи не являющихся членом функций и единственного принципа ответственности. [Обзор]

  • Стандарты Кодирования C++ (Herb Sutter и Andrei Alexandrescu) “Coding standards” здесь не означает “how много пробелов, я должен форматировать свой код? ” Эта книга содержит 101 лучшую практику, идиомы и распространенные ошибки, которые могут помочь Вам написать корректный, понятный, и эффективный код C++. [Обзор]

  • Шаблоны C++: полное руководство (David Vandevoorde и Nicolai M. Josuttis) Это эти книга о шаблонах, поскольку они существовали перед C++ 11. Это покрывает все от самых основ до части самого усовершенствованного шаблонного метапрограммирования и объясняет каждую деталь того, как шаблоны работают (и концептуально и в том, как они реализованы), и обсуждает много распространенных ошибок. Имеет превосходные сводки Одно правила определения (ODR) и разрешения перегрузки в приложениях. 1125-секундный выпуск , покрывающий C++ 11, C++ 14 и C++ 17, был уже опубликован. [Обзор]

  • C++ 17 - полное руководство (Nicolai M. Josuttis) Эта книга описывает все новые возможности, представленные в C++ 17 Стандартов, касающихся всего от простых как 'Встроенные Переменные', 'constexpr, если' полностью до 'Полиморфных Ресурсов памяти' и 'Новый и Удаляют со сверхвыровненными Данными'.

Усовершенствованный

  • современный Дизайн C++ (Andrei Alexandrescu) инновационная книга по усовершенствованным универсальным методам программирования. Представляет основанный на политике дизайн, списки типов, и фундаментальные универсальные идиомы программирования затем объясняют, сколько полезных шаблонов разработки (включая маленькие объектные средства выделения, функторы, фабрики, посетителей и мультиметоды) может быть реализовано эффективно, modularly, и чисто использование универсального программирования. [Обзор]

  • Шаблонное Метапрограммирование C++ (David Abrahams и Aleksey Gurtovoy)

  • Параллелизм C++ В Действии (Anthony Williams) книга, касающаяся C++ 11 поддержки параллелизма включая библиотеку потока, библиотеку атомной энергетики, модель памяти C++, блокировки и взаимные исключения, а также проблемы разработки и отладки многопоточных приложений. 1132-секундный выпуск , покрывающий C++ 14 и C++ 17, был уже опубликован.

  • Усовершенствованное Метапрограммирование C++ (Davide Di Gennaro) предC++ 11 руководств методов TMP, сфокусированных больше на практике, чем теория. Существует тонна отрывков в этой книге, некоторые из которых сделаны устаревшими чертами типа, но методы, тем не менее, полезны для знания. Если можно выносить изворотливое форматирование/редактирование, легче читать, чем Alexandrescu, и возможно, более полезное. Для более опытных разработчиков существует хороший шанс, что можно взять что-то о темном угле C++ (причуда), который обычно только появляется через обширный опыт.

Стиль ссылки - Все Уровни

  • Язык Программирования на C++ (Bjarne Stroustrup) ( обновленный для C++ 11 ) классическое введение в C++ его создателем. Записанный, чтобы быть параллельными классическому K& R, это действительно читает очень как он и покрывает примерно все от базового языка до стандартной библиотеки к парадигмам программирования к философии языка. [Обзор] Примечание: Все выпуски стандарта C++ прослежены в этом вопросе: , Где я нахожу текущий стандарт C++ .

  • Учебное руководство Библиотеки Стандарта C++ и Ссылка (Nicolai Josuttis) ( обновленный для C++ 11 ) введение и ссылка для Библиотеки Стандарта C++. Второй выпуск (выпущенный 9 апреля 2012) покрывает C++ 11. [Обзор]

  • Потоки IO C++ и Локали (Angelika Langer и Klaus Kreft) существуют очень мало для высказывания об этой книге за исключением того, что, если Вы хотите знать что-нибудь о потоках и локалях, затем это - одно место для нахождения категорических ответов. [Обзор]

C++ 11/14/17/†¦ Ссылки:

  • C++ 11 / 14 / 17 Стандарт (INCITS/ISO/IEC 14882:2011/2014/2017) Это, конечно, является заключительным арбитром всего, что является или не является C++. Знайте, однако, что это предназначается просто как ссылка для [1 199], испытал пользователи, готовые посвятить продолжительное время и усилие к его пониманию. C++ 17 стандартов выпущен в электронной форме за 198 швейцарских франков.

  • C++ 17 стандартов доступны, но по-видимому не в экономичной форме †“ непосредственно от ISO он стоит 198 швейцарских франков (США приблизительно за 200$). Для большинства людей заключительный проект, прежде чем стандартизация является более, чем соответствующей (и бесплатной). Многие предпочтут еще более новый проект , документируя новые возможности, которые, вероятно, будут включены в C++ 20.

  • Обзор Нового C++ (C++ 11/14) (только PDF) (Scott Meyers) ( обновленный для C++ 14 ) Это презентационные материалы (слайды и некоторые примечания лекции) трехдневного учебного курса, предлагаемого Scott Meyers, который является весьма уважаемым автором на C++. Даже при том, что список объектов короток, качество высоко.

  • Инструкции по Ядру C++ (C++ 11/14/17/†¦) (отредактированный Bjarne Stroustrup и Herb Sutter) развивающийся документ онлайн, состоящий из ряда инструкций для использования современного C++ хорошо. Инструкции фокусируются на относительно высокоуровневых проблемах, таких как интерфейсы, управление ресурсами, управление памятью и параллелизм, влияющий на архитектуру приложения и дизайн библиотеки. Проект был объявлен в CppCon '15 Bjarne Stroustrup и другими и вклады приветствий от сообщества. Большинство инструкций добавляется с объяснением и примерами, а также обсуждениями возможной поддержки инструмента. Много правил специально разработаны, чтобы быть автоматически поддающимися проверке инструментами статического анализа.

  • C++ супер-FAQ (Marshall Cline, Bjarne Stroustrup и другие) является усилием Стандарта Основа C++ для объединения часто задаваемых вопросов C++, ранее сохраняемых индивидуально Marshall Cline и Bjarne Stroustrup и также слиянием новых вкладов. Объекты главным образом решают проблемы на промежуточном уровне и часто пишутся с юмористическим тоном. Не все объекты могли бы быть полностью актуальными с последним выпуском стандарта C++ все же.

  • cppreference.com (C++ 03/11/14/17/†¦) (инициируемый Nate Kohl) является Wiki, которая суммирует основные функции базового языка и имеет обширную документацию библиотеки стандарта C++. Документация очень точна, но легче читать, чем официальный стандартный документ и обеспечивает лучшую навигацию из-за ее характера Wiki. Проектная документация все версии стандарта C++ и сайта позволяет фильтровать дисплей для определенной версии. Проект был представлен Nate Kohl в CppCon' 14 .

Классика / Более старый

Примечание: Некоторая информация, содержавшая в рамках этих книг, не может быть актуальной или больше продуманная лучшая практика.

  • Дизайн и Эволюция C++ (Bjarne Stroustrup), Если Вы хотите знать , почему язык является способом, которым это, эта книга - то, где Вы находите ответы. Это покрывает все перед стандартизацией из C++.

  • Размышления на C++ - (Andrew Koenig и Barbara Moo) [Обзор]

  • Усовершенствованные Стили Программирования на C++ и Идиомы (James Coplien) предшественник перемещения шаблона, это описывает много C ++-specific “idioms”. Это - конечно, очень хорошая книга и могло бы все еще стоить чтения, если можно сэкономить время, но довольно старый и не актуальные с текущим C++.

  • Крупный масштаб Разработка программного обеспечения C++ (John Lakos) Lakos объясняет методы для управления очень раком ++ проекты программного обеспечения. Конечно, хорошее чтение, если это только было актуально. Это было записано задолго до C++ 98 и промахи на многих функциях (например, пространства имен) важный для крупномасштабных проектов. Если необходимо работать в раке ++ проект программного обеспечения, Вы могли бы хотеть считать его, хотя необходимо взять больше, чем мелкая частица соли с ним. Первый объем нового выпуска ожидается в 2019 .

  • Внутренняя часть Модель Объекта C++ (Stanley Lippman), Если Вы хотите знать, как виртуальные функции членства обычно реализуются и как базовые объекты обычно размечаются в памяти в сценарии мультинаследования, и как все это влияет на производительность, это - то, где Вы найдете полные обсуждения таких тем.

  • Аннотируемый Справочник C++ (Bjarne Stroustrup, Margaret A. Ellis) Эта книга довольно устарела в том, что это исследует C++ 1989 года 2,0 версии - Шаблоны, исключения, пространства имен и новые броски еще не были представлены. Говоря, что однако, эта книга проходит весь стандарт C++ времени, объясняя объяснение, возможные реализации и функции языка. Это не книга, чтобы изучить принципы программирования и шаблоны на C++, но понять каждый аспект языка C++.

  • Взгляды в C++ (Bruce Eckel, 2-й Выпуск, 2000). Два объема; учебный стиль свободный набор вводных книг уровня.Загрузки: vol 1, vol 2. К сожалению, they’ ре, омраченное многими тривиальными ошибками (например, поддержание, что временные файлы автоматически const), без официального списка опечаток. Частичные 3 ул. глоток> партийный список опечаток доступны в ( http://www.computersciencelab.com/Eckel.htm ), но it’ s, по-видимому, не сохраняемый.

  • Научный и Технический C++: Введение в Усовершенствованные Методы и Примеры (John Barton и Lee Nackman) Это - всесторонняя и очень подробная книга, которая пыталась объяснить и использовать все функции, доступные в C++ в контексте численных методов. Это представило в то время несколько новых методов, таких как Любопытно Повторяющийся Шаблонный Шаблон (CRTP, также названный приемом Barton-Nackman). Это вело несколько методов, таких как размерный анализ и автоматическое дифференцирование. Это шло с большим количеством компилируемого и полезного кода, в пределах от синтаксического анализатора выражения к обертке Lapack. Код все еще доступен здесь: http://www.informit.com/store/scientific-and-engineering-c-plus-plus-an-introduction-9780201533934 . К сожалению, книги имеют бытьприезжайте несколько устаревшие в стиль и функции C++, однако, это было невероятное проявление силы в то время (1994, предварительный STL). Главы по наследованию динамики являются немного сложными для понимания и не очень полезные. Обновленная версия этой классической книги, которая включает семантику перемещения и уроки, извлеченные из STL, была бы очень хороша.

7
задан esad 19 August 2009 в 20:09
поделиться

4 ответа

Я не уверен, но предполагаю, что это связано с тем, что пользователи добавляют свои собственные расширения и подклассы к некоторым материалам Apple. В этом случае вы можете просто переопределить используемый метод и уловить случай, когда строка является «MyOwnValue», а затем делать с ней все, что захотите. Это значительно проще, чем необходимость изменять перечисление Apple, и это также предохраняет вас от каких-либо ошибок.

Это также может быть сделано для того, чтобы Apple упростила независимость от версий. С перечислениями, если вы каким-то образом измените их порядок, это может вызвать множество проблем для любого из их значений, которые были кэшированы (по любой причине). Если значение перечисления 1 << 3 при сохранении в файл, Apple добавляет еще одно перечисление, так что теперь его значение равно 1 << 4, тогда очевидно, что из вашей программы выходит что-то не то. Почему бы им просто не быть осторожными с перемещением значений перечисления, я не знаю, но я думаю, что они наверняка использовали NSString, потому что его значение или порядок не могут быть изменены в любой версии.

11
ответ дан 6 December 2019 в 05:49
поделиться

Еще одна причина, по которой я подумал в пользу NSString, заключается в том, что он может передаваться везде, где принят id (например, userInfo или как ключи словаря ), тогда как примитивным типам (перечислениям) потребуется какая-то оболочка для этого

5
ответ дан 6 December 2019 в 05:49
поделиться

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

Возьмем, например, CoreAnimation. Могут быть значения, которые используются внутри компании, но не поддерживаются или не предоставляются через общедоступный API по разным причинам; На ум сразу же приходят «детали реализации».

Кроме того, строки как константы допускают расширение, как предполагает Эли. Они также имеют тенденцию быть более информативными при отладке. «kCAGravityTop» гораздо более показателен, чем, скажем, «4».

С точки зрения производительности, использование строк очень незначительно. Статические строки, из которых фактически состоит внутренний аналог каждого внешнего объявления почти каждой строковой константы, эффективно обрабатываются компилятором, и первым тестом метода -isEqualToString: является равенство указателя - очень быстро. Не так быстро, как switch (), но, учитывая объем выполнения кода, подразумеваемый константой, разница в несколько циклов между switch () и сравнением строк не имеет значения.

9
ответ дан 6 December 2019 в 05:49
поделиться

Я подозреваю, что причина скорее историческая или стилистическая, чем что-либо еще. Вот как это сделали фреймворки NeXT и создали «стиль» Какао. Преимущество этого подхода заключается в том, что проверка значения в отладчике может дать значимое значение (например, @ "CAGravityTop" или что-то подобное вместо бессмысленного int ). Поскольку статические строки обрабатываются компилятором разумно, сравнение может осуществляться путем сравнения указателей, а не равенства строк (см. Ответ bbum), поэтому при таком подходе производительность оказывается незначительной.

7
ответ дан 6 December 2019 в 05:49
поделиться
Другие вопросы по тегам:

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