Я смотрел на некоторый код C++ в качестве примера для аппаратного интерфейса, с которым я работаю и заметил много операторов вдоль следующих строк:
if ( NULL == pMsg ) return rv;
Я уверен, что услышал, что люди говорят, что помещение первой константы является хорошей идеей, но почему это? Это именно так, что, если у Вас есть большой оператор, можно быстро видеть то, с чем Вы выдерживаете сравнение или есть ли больше к нему?
Так что вы не смешиваете сравнение (==) с назначением (=).
Как вы знаете, вы не можете назначить постоянную. Если вы попытаетесь, допросчик даст вам ошибку.
В основном это один из методов защиты защиты. Защитить себя от себя.
Чтобы не смешивать сравнение (= =) с присвоением (=).
Как известно, нельзя присваивать константу. Если вы попытаетесь, заполнитель выдаст вам ошибку.
По сути, это один из методов оборонительного программирования. Чтобы защитить себя от себя.
-121--967912- Когда константа будет первой, компилятор предупредит вас, если вы случайно напишете =
, а не = =
, так как присвоение значения константе недопустимо.
Чтобы не дать вам написать:
if ( pMsg = NULL ) return rv;
по ошибке. Хороший компилятор предупредит вас об этом, однако, поэтому большинство людей не используют «постоянный первый» способ, так как им трудно читать.
Это останавливает один = ошибка присваивания.
Например,
if ( NULL = pMsg ) return rv;
не будет компитен, где as
if ( pMsg = NULL) return rv;
соберет и даст вам головные боли
Чтобы уточнить то, что я написал в некоторых комментариях, вот причина не , чтобы сделать это в коде C ++.
Кто-то пишет, скажем, класс String и решает добавить литого оператора в Const Char *
:
class BadString
{
public:
BadString(const char* s) : mStr(s) { }
operator const char*() const { return mStr.c_str(); }
bool operator==(const BadString& s) { return mStr == s.mStr; }
// Other stuff...
private:
std::string mStr;
};
Теперь кто-то слепо применяет константу == переменная
Шаблон программирования:
BadString s("foo");
if ("foo" == s) // Oops. This compares pointers and is never true.
{
// ...
}
Это, ИМО, более коварная проблема, чем случайное задание, потому что вы не можете сказать с сайта вызова, что что-либо явно не так.
Конечно, реальные уроки:
Но иногда вы имеете дело с сторонними API, вы не можете контролировать. Например, _BSTR_T
класс String, общий в программировании Windows COM страдает от этого недостатка.
Возможно, нет, но вы можете попробовать написать свой собственный плагин Resharper
-121--1863564-, чтобы не смешивать сравнение (=) с назначением (=).
Как известно, нельзя назначить константу. Если вы попытаетесь, заполнитель выдаст вам ошибку.
По сути, это один из методов оборонительного программирования. Чтобы защитить себя от себя.
-121--967912- Когда константа будет первой, компилятор предупредит вас, если вы случайно напишете =
, а не = =
, так как присвоение значения константе недопустимо.
Я забываю в статье, но цитата пошла что-то вроде: «Очевидно, что его проще вспомнить, чтобы сначала поставить постоянную, чем это запоминание, чтобы использовать ==»;;))
В IE7 можно вызвать firebug lite для текущей страницы, вставив в адресную строку следующее:
javascript:var firebug=document.createElement('script');firebug.setAttribute('src','http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js');document.body.appendChild(firebug);(function(){if(window.firebug.version){firebug.init();}else{setTimeout(arguments.callee);}})();void(firebug);
См. http://getfirebug.com/lite.html .
-121--659805- Можете ли вы попробовать 127,0,0,1
в качестве имени сервера вместо localhost
?
IIRC, с некоторыми драйверами/адаптерами mySQL, решает, используется ли сокет для установления соединения или нет.
-121--2330369-Компиляторы выводят предупреждения хорошо, но некоторые из нас в реальном мире не могут позволить себе рассматривать предупреждения как ошибки. Изменение порядка переменной и константы означает, что этот простой проскальзывание всегда отображается как ошибка и предотвращает компиляцию. Вы привыкаете к этому образцу очень быстро, и ошибка, от которой он защищает, является тонким, который часто трудно найти после введения.
Даже если вы можете получить время от GPS, вы должны знать, что GPS время не совсем то же самое, что UTC. GPS-приемник в iPhone может позаботиться об этом для вас.
-121--3678057-Процесс скрытия деталей реализации называется Инкапсуляция . Процесс минимизации зависимостей сборки для пользователей называется Изоляция . Существует большая (но стареющая) книга Джона Лакоса, посвященная обеим темам:
http://www.amazon.com/Large-Scale-Software-Design-John-Lakos/dp/0201633620
-121--4293897-Они сказали, «чтобы предотвратить смешение назначения и сравнения».
На самом деле я думаю, что это нонсенс: если вы настолько дисциплинированы, что вы не забудете поставить константу с левой стороны, вы определенно не смешите '=' с '= =', не так ли?;)