Первоначальная идея префиксов в переменных-членах C ++ заключалась в том, чтобы хранить дополнительную информацию о типах, о которой компилятор не знал. Так, например, у вас может быть строка фиксированной длины символов, а другая переменная, оканчивающаяся на «\ 0». Для компилятора они оба char *
, но если вы попытаетесь скопировать данные с одного на другое, у вас возникнут огромные проблемы. Итак, с моей головы,
char *aszFred = "Hi I'm a null-terminated string";<br>
char *arrWilma = {'O', 'o', 'p', 's'};
, где "asz" означает, что эта переменная является "строкой ascii (с нулевым окончанием), а" arr "означает, что эта переменная является массивом символов.
Тогда происходит волшебство. Компилятор будет очень доволен этим утверждением:
strcpy(arrWilma, aszFred);
Но вы, как человек, можете посмотреть на это и сказать: «Эй, эти переменные на самом деле не одного типа, я не могу этого сделать».
К сожалению, во многих местах используются стандарты, такие как "m_" для переменных-членов, "i" для целых чисел независимо от того, как они используются, "cp" для указателей на символы. Другими словами, они дублируют то, что знает компилятор, и в то же время затрудняют чтение кода. Я считаю, что эта пагубная практика должна быть запрещена законом и подлежать суровым наказаниям.
Наконец, я должен упомянуть два момента:
- Разумное использование функций C ++ позволяет компилятору знать информацию, которую вы должны были закодировать в необработанных переменных в стиле C. Вы можете создавать классы, которые будут разрешать только допустимые операции. Это должно быть сделано настолько практичным, насколько это возможно.
- Если ваши блоки кода настолько длинные, что вы забыли, какого типа переменная, прежде чем использовать ее, они будут way слишком длинными. Не используйте имена, реорганизуйте.