Частые замечания в заданиях по C++ — различия между версиями
Assaron (обсуждение | вклад) м |
Assaron (обсуждение | вклад) |
||
Строка 2: | Строка 2: | ||
Собственно, замечания: | Собственно, замечания: | ||
+ | * Список частых замечаний не прочитан или не осознан. | ||
* Не надо смешивать пробелы и табы для отступов. Необходимо придерживатся строго одного стиля (лучше с пробелами), иначе у кого-нибудь что-нибудь поедет и это будет невозможно читать. Кроме того, таким образом легко заметить копи-паст, который не одобряется. | * Не надо смешивать пробелы и табы для отступов. Необходимо придерживатся строго одного стиля (лучше с пробелами), иначе у кого-нибудь что-нибудь поедет и это будет невозможно читать. Кроме того, таким образом легко заметить копи-паст, который не одобряется. | ||
* Тоже самое с фигурными скобками — придерживайтесь одного стиля. | * Тоже самое с фигурными скобками — придерживайтесь одного стиля. | ||
Строка 8: | Строка 9: | ||
* Если не предполагается, что переменная должна изменятся, следует объявлять ее константной. Особенно, если это касается сигнатуры функции. | * Если не предполагается, что переменная должна изменятся, следует объявлять ее константной. Особенно, если это касается сигнатуры функции. | ||
* Лучше не создавать функций void print_something(something const & s, ostream & o), лучше перегружать operator<<, в котором точно не надо выводить в конце перевод строки. | * Лучше не создавать функций void print_something(something const & s, ostream & o), лучше перегружать operator<<, в котором точно не надо выводить в конце перевод строки. | ||
− | * Есть замечательные стандарные функции, лежащие в <algorithm>. Не следует изобретать велосипеды и писать свои реализации. Наиболее полезные: reverse, copy, swap, fill. | + | * Есть замечательные стандарные функции, лежащие в <algorithm>. Не следует изобретать велосипеды и писать свои реализации. Наиболее полезные: reverse, copy, swap, fill, max, min. |
* Есть только один случай, когда название функции может являтся существительным — когда название отражает то, что функция возвращает: например, union, gcd, area и т.д. | * Есть только один случай, когда название функции может являтся существительным — когда название отражает то, что функция возвращает: например, union, gcd, area и т.д. | ||
− | * Не надо писать if, for и while в одну строчку. | + | * Не надо писать if, for и while в одну строчку. Если внтри for'а ничего не делается, ";" следует перенести на следующую строчку. |
* Есть замечательное соглашение, что функции сравнении int compare(a, b) возвращают число, меньшее нуля, если a < b, равное нулю, если a = b, и большее нуля, если a > b. Не надо изобретать своих неинформативных возвращаемых значений. | * Есть замечательное соглашение, что функции сравнении int compare(a, b) возвращают число, меньшее нуля, если a < b, равное нулю, если a = b, и большее нуля, если a > b. Не надо изобретать своих неинформативных возвращаемых значений. | ||
* Следует объявлять переменные как можно ближе к месту первого использования. Это, во-первых, уменьшает число переменных в данной области видимости до тех, которые действительно необходимы, во-вторых, если первое испоьзование — это инциализация, это уменьшает время проведенное переменной в неинициаизированном состоянии, что уменьшает вероятность ей в таком состоянии быть поиспользованной. | * Следует объявлять переменные как можно ближе к месту первого использования. Это, во-первых, уменьшает число переменных в данной области видимости до тех, которые действительно необходимы, во-вторых, если первое испоьзование — это инциализация, это уменьшает время проведенное переменной в неинициаизированном состоянии, что уменьшает вероятность ей в таком состоянии быть поиспользованной. | ||
Строка 19: | Строка 20: | ||
* Следует использовать списки инциализации, там где это возможно. | * Следует использовать списки инциализации, там где это возможно. | ||
* Для определения того, чем является символ (цифра, буква, пробельный символ) есть функции issomething из <cctype>. | * Для определения того, чем является символ (цифра, буква, пробельный символ) есть функции issomething из <cctype>. | ||
+ | * Для подключения заголовочных файлов, пришедших из C следует использовать <cheader>, а не <header.h>. В <cheader> все обернуто в пространство имен std, что не может не радовать. | ||
+ | * Не надо объединять переменные в объявлениях по типу. Одновременно можно объявлять только такие небольшие группы как x,y, или a,b,c или еще что-нибудь подобное. |
Версия 04:51, 11 июня 2011
В этой статье приведены некоторые замечания, которые довольно часто встречаются в работах по C++. Пока никак не упорядочены.
Собственно, замечания:
- Список частых замечаний не прочитан или не осознан.
- Не надо смешивать пробелы и табы для отступов. Необходимо придерживатся строго одного стиля (лучше с пробелами), иначе у кого-нибудь что-нибудь поедет и это будет невозможно читать. Кроме того, таким образом легко заметить копи-паст, который не одобряется.
- Тоже самое с фигурными скобками — придерживайтесь одного стиля.
- Не надо использовать приведение в C-стиле (type)v или type(v) — с помощью них можно привести практически все что угодно к чему угодно, следует использовать соответствующие C++ аналоги: static_cast, dynamic_cast, reinterpret_cast и const_cast.
- Не надо заменять символы их ascii-кодами — следует писать '0', а не 48.
- Если не предполагается, что переменная должна изменятся, следует объявлять ее константной. Особенно, если это касается сигнатуры функции.
- Лучше не создавать функций void print_something(something const & s, ostream & o), лучше перегружать operator<<, в котором точно не надо выводить в конце перевод строки.
- Есть замечательные стандарные функции, лежащие в <algorithm>. Не следует изобретать велосипеды и писать свои реализации. Наиболее полезные: reverse, copy, swap, fill, max, min.
- Есть только один случай, когда название функции может являтся существительным — когда название отражает то, что функция возвращает: например, union, gcd, area и т.д.
- Не надо писать if, for и while в одну строчку. Если внтри for'а ничего не делается, ";" следует перенести на следующую строчку.
- Есть замечательное соглашение, что функции сравнении int compare(a, b) возвращают число, меньшее нуля, если a < b, равное нулю, если a = b, и большее нуля, если a > b. Не надо изобретать своих неинформативных возвращаемых значений.
- Следует объявлять переменные как можно ближе к месту первого использования. Это, во-первых, уменьшает число переменных в данной области видимости до тех, которые действительно необходимы, во-вторых, если первое испоьзование — это инциализация, это уменьшает время проведенное переменной в неинициаизированном состоянии, что уменьшает вероятность ей в таком состоянии быть поиспользованной.
- Пользуйтесь нормальными словарями. Хотя бы lingvo.yandex.ru. Там можно узнать, например, который из переводов слов «площадь» или «больше» нужен. Там же можно посмотреть, что по-английски вычитание пишется как subtraction, а не substraction или еще как-нибудь.
- После if, for и while перед «(» должен быть пробел.
- После идентификатора функции перед «(» пробел не нужен. Как в использовании, так и в объявлении и определении.
- Если в заголовочном файле определяется класс, то название этого файла должно совпадать с названием класса с точностью до расширения.
- Следует использовать списки инциализации, там где это возможно.
- Для определения того, чем является символ (цифра, буква, пробельный символ) есть функции issomething из <cctype>.
- Для подключения заголовочных файлов, пришедших из C следует использовать <cheader>, а не <header.h>. В <cheader> все обернуто в пространство имен std, что не может не радовать.
- Не надо объединять переменные в объявлениях по типу. Одновременно можно объявлять только такие небольшие группы как x,y, или a,b,c или еще что-нибудь подобное.