у меня есть фрагмент кода, в котором я присваиваю значение переменной, var
, В промежутке между переменными действуют левые / правые операции сдвига. Может ли такая переменная стать нулевой?
Обратите внимание, что ноль в основном определяется как
#define null ((void*)0)
Если это не может быть нулем, тогда проверка как:
if (var == null)
приведет к мертвому коду, который никогда не будет выполнен.
Встроенные операторы сдвига применимы только к значениям целое или незаданное enum типы. Встроенный в сравнении с вашим null
законно только для значений указатель типы. Это означает, что результаты встроенной смены никогда не сравнятся с вашими null
, (Единственная потенциальная лазейка здесь — это возможность использовать сдвиги для формирования константы нулевого указателя — целого нуля. Но это возможно только в версии языка, предшествующего C ++ 11. Больше нет.) Сравнение недопустимо.
Другими словами, нет действительного контекста, в котором этот вопрос может даже возникнуть. Ваш if
не будет производить «мертвый код» или «живой код». Это просто не скомпилируется вообще.
Но если вы говорите о перегруженных операторах, то все возможно. Однако в этом случае ваш вопрос слишком широк, чтобы иметь смысл.
В C вы можете сравнивать значения целых чисел с указателями, так что код будет выдавать предупреждение, но, вероятно, будет работать так, как ожидалось. (Определенно не рекомендуется, хотя)