Именование С++: read_input() vs. readInput()

Какое соглашение об именах предпочтительнее в С++? Подчеркнутый метод или метод camelCase? Я закодирован в Java некоторое время, и я привык к соглашениям об именах camelCase. Какой из них более распространен?

Кроме того, при определении класса существует ли какой-либо предпочтительный порядок частных/общедоступных/защищенных переменных/методов?
Как правило, друзья заканчивают? Как насчет typedefs, они попадают в начало определения класса?

Ответ 1

Все это очень субъективно, но в целом для С++ я делаю:

camelCase для функций и переменных.

PascalCase для классов.

public:
protected:
private:

В классах.

Изменить: Забыл эти 2:

Да, friend в конце, typedef либо в начале, если они используются в классе, либо после, если они используют класс (по понятным причинам).

Ответ 2

Я предпочитаю использовать ускоренный маршрут и соответствовать стандартной библиотеке. Это означает lower_case_names. Мне нравится, что мой код читается в соответствии с STL.

Ответ 3

Я обычно уважаю традиции платформы/среды, в которой я программирую, за исключением многоплатформенных проектов C/C++, где я нейтрален. При программировании C++ для платформы Win32 я склонен использовать венгерскую нотацию для переменных (тип или семантические префиксы). При программировании переменных - членов МФЦ m_ и т.д. Единственное, что я не могу получить легко в моих глазах является /POSIX Unix open_device_driver конвенции против openDeviceDriver стиле верблюжьего.

Ответ 4

подчеркивания часто более распространены в коде Unix или кросс-платформе.

Windows-код имеет тенденцию к обсадке на верблюдах

общедоступный, защищенный, закрытый - это то, чего я ожидал бы - но, возможно, это больше из моего времени С#.

Ответ 5

Самое главное здесь, что вы остаетесь последовательным. Если вы включаете код других людей в свой проект, придерживайтесь любого метода, который они использовали. Если вы планируете вносить этот код, скажем, в проект с открытым исходным кодом в будущем, старайтесь соблюдать свои правила кодирования. Если вы пишете весь свой собственный код с нуля, я бы сказал, придерживайтесь конвенций, которые вы привыкли использовать. Это особенно поможет, когда вы вернетесь к своему коду позже и попытаетесь понять, что вы написали.

Что касается спецификаций доступа к структуре/классу, вы, как правило, видите публичных участников, перечисленных первым, а затем защищенных, а затем частных (в порядке увеличения контроля доступа). Это делается в основном для удобства чтения. Когда другие люди используют ваш код, именно эти публичные участники будут взаимодействовать с ними, поэтому их размещение в верхней части декларации облегчает их поиск. Заказ участников таким образом сохраняет наиболее вероятную информацию, ближайшую к вершине. Я не вижу, что friend используется слишком часто, поэтому я не могу вспомнить какие-либо шаблоны относительно его использования. typedef обычно появляется наверху, поэтому при просмотре остальной части класса читатель уже понимает ваши пользовательские типы (также по причинам читаемости, typedef обычно группируются вместе и не перемежаются с объявлениями участников).

Существует целый ряд существующих конвенций кодирования, которые обычно используются, и единственное, что у них есть, является стандартом. Какую бы систему вы ни использовали, даже если вы ее определяете самостоятельно, она помогает, если у вас есть документ (или страница примерного кода), в котором изложено соглашение о кодировании. Последовательность улучшает читаемость, особенно когда вы пересматриваете старый код в будущем.

Вот несколько правил кодирования, которые могут дать вам несколько идей:

Ответ 6

Я использую символы подчеркивания для локальных переменных; ALL_UPPERCASE для макросов и констант; camelCase для ничего и CamelCase для всего остального.

Я всегда использую структуры и никогда не классы, и поэтому начинаю с публики: (не указывая его), а затем добавляя private: в конце.

Все это очень субъективно и нет правильного или неправильного ответа.

Ответ 7

Какое соглашение об именах больше предпочтительнее в С++? Под "подчеркиванием" метод или метод camelCase? у меня есть закодирован в Java на некоторое время, и я используется для обозначения camelCase конвенций. Какой из них больше превалирует?

Я бы сказал, "просто придерживайтесь того, что вы знаете об этом, если вы начинаете писать свои собственные библиотеки", они оба используются регулярно.

Кроме того, при определении класса существует ли какой-либо предпочтительный порядок частных/общедоступных/защищенных переменных/методов?

Это зависит от программиста/команды. Я заказываю по категориям. Я использую категорию для "внутренних/частных методов", и эта категория обычно занимает второе место (последняя из них запрещена).

Обычно ли друзья заканчивают?

Я использую их редко; Я вставляю их выше зависимости (метод), иначе, после категории конструктора/деструктора.

Как насчет typedefs, они попадают в начало определения класса?

Вот где я их помещаю.

Если вы хотите получить подробную информацию, есть общедоступные соглашения о кодировании. Поскольку у вас уже есть Java-фон, вы легко сможете прорезать "вкус" в них.

Ответ 8

Десятилетия кодирования как работы дали моим пальцам некоторую болезнь. Всякий раз, когда я использую свой мизинец, чтобы нажать клавишу [SHIFT] для заглавной буквы, я чувствую легкую боль.

Итак, я стал предпочитать snake_notation. Используя утилиту AutoHotKey, я назначил комбинацию [alt] + [space] для "подчеркивания символа" змеи. Для моего большого пальца немного неудобно нажать [alt], но лучше, чем использовать мизинец. (На самом деле [ctrl] + [space] намного лучше, но VisualStudio использует эту комбинацию как intellisense.) Кроме того, я считаю, что это быстрее, чем camelCase.

Я хочу, чтобы i-rocks запускает новую клавиатуру с клавишей подчеркивания для программистов, которые предпочитают snake_notation.