在一些遗留代码中,我遇到了以下空指针检查。
if( myPtr > 0 ) {
...
}
通过此if检查检查空指针是否存在技术风险?
正如其他人所说,比较是无效的,因此行为取决于编译器。许多OSES认为指针是有符号的,因为它们将地址空间分成半个,而负的部分属于内核,所以编译器可能会为<代码> MyPTR发出有符号的比较。
有几个案例我见过编译器认为指针是有符号的,但是我现在找不到它们。但是一个值得注意的例子是视窗中的POINTER_SIGNED
和POINTER_UNSIGNED
宏,它们解析为__sptr
和__uptr
另见
0
是一个空常量。所以这相当于ptr
问题是<代码>
例如,假设
px
是一个指向数组的指针,它当前指向第一个元素
利用这种知识,编译器可以理解重构和重写循环边界,这反过来又可以让编译器生成更快的代码。
但这也意味着
px
简而言之,要非常小心指针比较。
同时,null和任何其他指针之间的相等性得到了很好的定义。
另外,std::更少的
保证行为良好,并同意
在这种情况下,正确的重写是:
if(myPtr!=nullptr)
如果
myPtr
不是指针,或
if(myPtr)
如果
myPtr
是一种有符号的数字类型,那么你就有可能改变行为。我会先做。
在C语言中,指针和整数之间的有序比较格式不正确(即使整数是空指针常量,如本例中的情况)。风险在于编译器被允许并且确实拒绝编译此类代码。
您可以将其重写为以下任一项:
if(myPtr != nullptr)
if(myPtr)
问题内容: 有一些模式可用于检查方法的参数是否已赋值。 首先,经典的。在自制代码中很常见,并且很容易理解。 其次,您可以使用现有框架。该代码看起来更好一些,因为它仅占用一行。缺点是它可能调用另一个方法,这 可能 会使代码的运行速度慢一些,具体取决于编译器。 第三,您可以尝试调用对对象没有副作用的方法。乍一看可能很奇怪,但它的令牌少于上述版本。 我还没有看到广泛使用的第三种模式,感觉就像我自己发明了
本文向大家介绍sitecore 空/空检查,包括了sitecore 空/空检查的使用技巧和注意事项,需要的朋友参考一下 示例 IsNotNull 这是一种非常简单且流行的方法,用于检查项目是否不为空。它只是检查传入的对象是否为空。 IsNotNullOrEmpty 这与上面的IsNotNull相同,但是适用于字符串值而不是对象。 一片空白 这只是该IsNotNull()方法的逆过程。此方法断言该对
DescriptionServer遇到了一个内部错误(),它无法满足此请求。 例外 jasperException:java.lang.NullPointerException根本原因 NullPointerException
本文向大家介绍php通过各种函数判断0和空,包括了php通过各种函数判断0和空的使用技巧和注意事项,需要的朋友参考一下 函数对0的判断 对空的判断 补充:下面给大家介绍下php 语法里0不等于null为空的解决办法 今天遇到这样一个问题是这样的: php 语句里,我想判断一个值大于等于0. 我是使用 ($value !=null && $value >=0), 返回的结果为空,这点真的好奇怪。 实
问题内容: 我有的: 我有jQuery AJAX函数,可在查询数据库后返回HTML。根据查询结果,该函数将返回HTML代码,或者根据需要返回任何内容(即空白)。 我需要的: 我需要有条件地检查数据何时为空。 我的代码: 我的问题: 我尝试了多种条件,但都无法正确检查数据。根据我的发现,警告消息为空并不表示数据是 空的 不存在的 等于零 长度为零 空值 未定义 如果这些都不是,那么我该如何有条件地检