Избегайте кодирования информации о типе в названиях
Причина
Если названия отражают типы, а не функциональность, становится сложно изменять типы, используемые для предоставления этой функциональности. Кроме того, если тип переменной изменится, код, использующий её, придётся изменять. Минимизируйте непреднамеренные преобразования.
Плохой пример
void print_int(int i);
void print_string(const char*);
print_int(1); // повторяющийся, ручной подбор типов
print_string("xyzzy"); // повторяющийся, ручной подбор типов
Хороший пример
void print(int i);
void print(string_view); // также работает с любой подобной строке последовательностью
print(1); // чёткий, автоматический подбор типов
print("xyzzy"); // чёткий, автоматический подбор типов
Примечание
Названия с закодированными типами либо многословны, либо криптичны.
printS // вывести std::string
prints // вывести строку в стиле C
printi // вывести int
Засклонение к использованию таких приёмов, как венгерская нотация для кодирования типа, применялось в нетипизированных языках, но в общем случае излишне и активно вредно в строго статически типизированном языке, таком как C++, потому что аннотации устаревают (недостатки подобны комментариям и разлагаются как они) и они мешают хорошему использованию языка (используйте одно и то же имя и разрешение перегрузки вместо этого).
Примечание
Некоторые стили используют очень общие (не специфичные для типа) префиксы для обозначения общего использования переменной.
auto p = new User();
auto p = make_unique<User>();
// заметка: "p" не используется для обозначения "сырой указатель на тип User,"
// а просто для обозначения "это косвенность"
auto cntHits = calc_total_of_hits(/*...*/);
// заметка: "cnt" не используется для кодирования типа,
// а просто для обозначения "это количество чего-то"
Это не вредно и не попадает под это руководство, потому что не кодирует информацию о типе.
Примечание
Некоторые стили различают члены класса и локальные переменные, и/или глобальные переменные.
struct S {
int m_;
S(int m) : m_{abs(m)} { }
};
Это не вредно и не попадает под это руководство, потому что не кодирует информацию о типе.
Примечание
Подобно C++, некоторые стили различают типы и не-типы. Например, заглавными буквами пишут названия типов, но не названия функций и переменных.
typename<typename T>
class HashTable { // отображает строку на T
// ...
};
HashTable<int> index;
Это не вредно и не попадает под это руководство, потому что не кодирует информацию о типе.