Переменные соглашения о присвоении имен в C++

Я отвечаю на вопрос, даже если вопрос старен, потому что ни один из ответов выше не цитирует ссылку на язык

На самом деле оператор проверяет идентификаторы и == проверяет оператор на равенство,

Из справочника по языку:

Типы затрагивают почти все аспекты поведения объекта. Даже значение идентичности объектов в некотором смысле влияет: для неизменяемых типов операции, которые вычисляют новые значения, могут фактически возвращать ссылку на любой существующий объект с тем же типом и значением, в то время как для изменяемых объектов это недопустимо. Например, после a = 1; b = 1, a и b могут или не могут ссылаться на один и тот же объект со значением один, в зависимости от реализации, но после c = []; d = [], c и d гарантированно относятся к двум различным уникальным, вновь созданным пустым спискам. (Обратите внимание, что c = d = [] присваивает один и тот же объект как c, так и d.)

, поэтому из вышеприведенного утверждения мы можем заключить, что строки, которые являются неизменяемым, могут сбой при проверке с помощью «is» и может проверяться успешно, если отмечено с помощью «is»

То же самое относится к int, кортежу, которые также являются неизменяемыми типами

34
задан stung 25 October 2008 в 06:02
поделиться

10 ответов

Такая Венгерская запись довольно бесполезна, и возможно хуже, чем бесполезный, если необходимо изменить тип чего-то. ( надлежащий вид Венгерской записи является другой историей.)

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

55
ответ дан 27 November 2019 в 16:07
поделиться

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

16
ответ дан 27 November 2019 в 16:07
поделиться

Нет. "Неправильная венгерская запись" - особенно стр для двойной косвенности - имели некоторый смысл для ранних компиляторов C, где Вы могли записать

int * i = 17;
int j = ***i;

без даже предупреждения из компилятора (и это могло бы даже быть допустимым кодом правильных аппаратных средств...).

"истинная венгерская запись" (как связано главным Фанатом) является IMO все еще допустимая опция, но не обязательно предпочтенная. Современное приложение C++ обычно имеет десятки или сотни типов, для которых Вы не найдете подходящие префиксы.

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

float fXmin, fXmax, fXpeak; // x values of range and where y=max
int   iXmin, iXMax, iXpeak; // respective indices in x axis vector
<час>

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

Мое обоснование: цель кодировать стандарты состоит в том, чтобы выполнить принцип наименьшего количества удивления. Используя один стиль последовательно более важно, чем который стиль Вы используете.

15
ответ дан 27 November 2019 в 16:07
поделиться

Что должно не любить или дразнить о "ppMyObjects" в этом примере кроме него являющийся несколько ужасным? У меня нет твердых мнений так или иначе, но это передает полезную информацию сразу, что "MyObjects" не делает.

6
ответ дан 27 November 2019 в 16:07
поделиться

Я соглашаюсь с другими ответами здесь. Или продолжите использовать стиль, который Вам дают от переданного для пользы непротиворечивости или придумываете новое соглашение, которое работает на Вашу команду. Важно, чтобы команда согласилась, поскольку почти гарантируется изменение тех же файлов. Однако некоторые вещи, которые я нашел очень интуитивным в прошлом:

Класс / членские переменные структуры должны выделиться - я обычно снабжаю префиксом их всех m_
Глобальные переменные должны выделиться - обычный префикс с g_
Переменные в целом должны запуститься с нижнего регистра
, Имена функций в целом должны запуститься с верхнего регистра
Макросы, и возможно перечисления должны быть всем верхним регистром
, Все имена должны описать то, что функция/переменная делает и никогда не должна описывать свой тип или значение.

3
ответ дан 27 November 2019 в 16:07
поделиться

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

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

2
ответ дан 27 November 2019 в 16:07
поделиться

Венгерская запись была распространена среди пользователей API MFC и Win32. Если Ваши предшественники использовали это, можно, вероятно, лучше всего продолжить использовать его (даже при том, что это сосет). Остальная часть мира C++ никогда не имела это глупое соглашение, не используйте его при использовании чего-то другого, чем те API.

1
ответ дан 27 November 2019 в 16:07
поделиться

Я думаю, что Вы все еще найдете, что большинство магазинов, которые программа в Visual C++ продолжает работать с венгерской записью или по крайней мере политым вниз версия его. В нашем магазине половина нашего приложения является C++ прежней версии с новейшим уровнем C# на вершине (со слоем управляемого С++ в середине.) Наш код C++ продолжает использовать венгерскую запись, но нашу нотацию использования кода C# как Вы представленный. Я думаю, что это ужасно, но это последовательно.

я говорю, использую то, что Ваша команда хочет для Вашего проекта. Но если Вы работаете над унаследованным кодом или присоединяетесь к команде, палке со стилем, который присутствует для непротиворечивости.

1
ответ дан 27 November 2019 в 16:07
поделиться

Все вниз к персональному предпочтению. Я работал на 2 компании оба с подобными схемами, где участника Вар называют как m_varName. Я никогда не видел Венгерской записи, используемой на работе, и действительно не люблю его, но снова вниз к предпочтению. Мое общее чувство - то, что IDE должен заботиться о сообщении u, что вводит его, поэтому, пока имя является достаточно описательным из того, что это делает (m_color, m_shouldBeRenamed), тогда это в порядке. Другой вещью, которую я действительно люблю, является различие между участником переменный, локальный var и постоянным именованием, таким образом, его легкое для наблюдения то, что происходит в функции и куда Вар прибывают из. Участник: Константа m_varName: локальный c_varName: varName

1
ответ дан 27 November 2019 в 16:07
поделиться

При использовании CamelCase, конвенция состоит в том, чтобы Использовать для своей выгоды первую букву для структур классов и не имен типа примитива и нижнего регистра первая буква для элементов данных. Капитализация методов имеет тенденцию быть ассортиментом, мои методы имеют тенденцию быть глаголами и уже distingished parens, таким образом, я не использую для своей выгоды методы.

Лично мне не нравится читать код CamelCase и предпочитать нижний регистр символов нижнего подчеркивания для данных и идентификаторов метода, используя для своей выгоды типы и резервируя верхний регистр для акронимов и редкого случая, где я использую макрос (предупреждением этого является МАКРОС).

0
ответ дан 27 November 2019 в 16:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: