Ответ 1
Прежде всего, позвольте мне подчеркнуть, что мой ответ в значительной степени субъективен, основываясь только на моем опыте, а не на каких-либо внешних данных или ресурсов.
Соглашение - это просто: соглашение. Не имеет значения, какой из них вы используете, а скорее читаете и удобны для ввода типов для вас и программистов, которым требуется поддерживать код, с которым вы работаете в данный момент.
Я использую CamelCase на С++, потому что он более визуально приятен для моего глаза и потому, что я просто привык к нему. С другой стороны, я использую символы подчеркивания и строчные имена в C - это становится своего рода простым способом определить, какой язык был использован для меня.
Другие программисты, безусловно, дадут вам другие причины: большинство из них будут более или менее субъективными, истинными для них или тем, в которых они являются членами.
Посмотрите на другие языки. С# поддерживает CamelCase, с первой буквой заглавной. Почему это лучше, чем оставить первый нижний регистр?
PHP-программисты, которые используют фреймворк Zend, также знакомы с соглашениями об именах Zend: http://framework.zend.com/manual/en/coding-standard.naming-conventions.html.
API-интерфейс Drupal также является PHP, но использует символы подчеркивания, строчные буквы и префиксы для модулей/тем.
Библиотеки, фреймворки и даже целые языки могут иметь соглашения об именах, которые по какой-то причине предпочитают их создатели. Это не заставляет вас отказаться от использования обычного соглашения об именах:). Итак, в целом, я думаю, что ответ на ваш вопрос может быть настолько глупым: просто потому, что: D. Потому что отдельные программисты чувствуют себя комфортно с ним.
Что касается второго вопроса: нет, я бы не рекомендовал использовать какое-либо соглашение над другим для любого проекта. Выберите лучшее для вас. Единственная ситуация, когда у вас нет выбора, - это когда вы работаете в команде разработчиков, которая по какой-то причине хочет придерживаться единого соглашения (например, согласованного API).
Третий вопрос: да, вы можете просмотреть его таким образом. Обычно я предпочитаю свои классы, поэтому довольно очевидно, что UmbraModule
или TCODConsole
являются частью Umbra или libtcod API. Что касается STL, я предпочитаю, чтобы им не было. Префикс для всего std::*
- это очень четкое указание на то, является ли он частью другой библиотеки или нет, поэтому код инфраструктуры/приложения четко различается - оставив CamelCase и подчеркивает вторичный вопрос:).