我有一个代码片段,我给变量赋值var
。在变量之间进行左/右移操作。这样的变量是否可以变为空?c/C++中的左移或右移操作可以使变量变为空吗?
需要注意的是空主要是定义为
#define null ((void*)0)
如果它不能为空,然后进行检查,如:
if (var == null)
会产生死代码,这将永远是执行。
我有一个代码片段,我给变量赋值var
。在变量之间进行左/右移操作。这样的变量是否可以变为空?c/C++中的左移或右移操作可以使变量变为空吗?
需要注意的是空主要是定义为
#define null ((void*)0)
如果它不能为空,然后进行检查,如:
if (var == null)
会产生死代码,这将永远是执行。
内置移位运算符仅适用于值为积分或无标寸枚举类型。与您的null
相比的内置比较仅适用于指针类型的值。这意味着内置转换的结果永远不能与您的null
进行比较。 (这里唯一的潜在漏洞是可以使用shift来形成一个空指针常量 - 一个整数零,但这只能在pre-C++ 11版本的语言中才能实现,现在不能再用了。)这种比较是无效的。
换句话说,这个问题甚至都不存在。您的if
不会产生“死码”或“存活码”。它根本不会编译。
但是,如果您正在谈论重载操作员,那么一切皆有可能。但是,在这种情况下,您的问题太过宽泛,无法理解。
分配给var的值是一个指针,并在该逻辑操作上完成,如移位和位智。那么可能呢。 – user3552519
@ user3552519:不能。对C++中的指针执行“移位和位智”操作是不可能的。 C++中的移位和按位操作只适用于整型和枚举类型。 – AnT
难道我们不能指定一个指针地址并对它进行逻辑运算吗? – user3552519
什么是“大多数定义”在“空主要定义为”应该是什么意思? – AnT
我认为在大多数C++编译器中,NULL被定义为0.显然'null'不是标准定义,所以可以定义为任何东西。没有完整的代码,很难说,但我会争辩说,如果该值变为零,那么它将匹配'null'或'NULL'定义 - 尽管有警告。 –