Может ли переменная стать нулевой в результате операции сдвига влево или вправо в c / c ++?

у меня есть фрагмент кода, в котором я присваиваю значение переменной, var, В промежутке между переменными действуют левые / правые операции сдвига. Может ли такая переменная стать нулевой?

Обратите внимание, что ноль в основном определяется как

#define null ((void*)0)

Если это не может быть нулем, тогда проверка как:

if (var == null)

приведет к мертвому коду, который никогда не будет выполнен.

0

Решение

Встроенные операторы сдвига применимы только к значениям целое или незаданное enum типы. Встроенный в сравнении с вашим null законно только для значений указатель типы. Это означает, что результаты встроенной смены никогда не сравнятся с вашими null, (Единственная потенциальная лазейка здесь — это возможность использовать сдвиги для формирования константы нулевого указателя — целого нуля. Но это возможно только в версии языка, предшествующего C ++ 11. Больше нет.) Сравнение недопустимо.

Другими словами, нет действительного контекста, в котором этот вопрос может даже возникнуть. Ваш if не будет производить «мертвый код» или «живой код». Это просто не скомпилируется вообще.

Но если вы говорите о перегруженных операторах, то все возможно. Однако в этом случае ваш вопрос слишком широк, чтобы иметь смысл.

2

Другие решения

В C вы можете сравнивать значения целых чисел с указателями, так что код будет выдавать предупреждение, но, вероятно, будет работать так, как ожидалось. (Определенно не рекомендуется, хотя)

1

По вопросам рекламы [email protected]