在nullptr上做指针运算安全吗? 不,nullptr上的算术没有很好的定义,因为它本身不是一个指针类型(但是所有指针类型都存在到NULL值的转换)。 See here ; std::nullptr_t是空指针文字nullptr的类型。它是一个独特的类型,本身不是指针类型或指向成员类型的指针。 一般来说,任意的指针运算(即使是NULL值)几乎肯定会导致问题-你没有分配内存-它不是你试图读取或写入的。 出于比较的目的(例如,一个过去的结束),你会很好,但否则你的代码将导致未定义的行为。 更多阅读请参见Wikipedia on undefined behavior。
5条答案
按热度按时间62lalag41#
你没有定义“安全”对你意味着什么,但是不管怎样,你提出的代码有未定义的行为。指针算术只允许指向数组对象的指针值,或者可能指向数组的末尾。(非数组对象被认为是一个元素的数组。)
由于空指针从来不是对象的地址或对象的过去地址,因此您的代码永远不会有定义良好的行为。
krcsximq2#
在
nullptr
上做指针运算安全吗?C++定义了两种对
nullptr
的操作,如:x +/- 0 = x
x - y = 0
(x
和y
具有相同类型)你不能对没有定义的东西做出假设,所以你不应该这样做。
nue99wik3#
将
0
添加到nullptr
具有定义良好的行为,并返回nullptr
。向
nullptr
添加任何其他内容都会产生未定义的行为。[表达式添加]/4有
当一个整型的表达式J与一个指针类型的表达式P相加或相减时,结果的类型为P。
第一个要点涵盖了添加零,第二个要点涉及数组,最后一个要点涵盖了其他所有内容。
因为我们从来没有一个数组,所以我们可以忽略第二个项目符号,只处理第一个和第三个项目符号。这使得我们添加零是定义行为,添加任何其他值都是未定义行为。
vddsk6oq4#
在nullptr上做指针运算安全吗?
不,
nullptr
上的算术没有很好的定义,因为它本身不是一个指针类型(但是所有指针类型都存在到NULL值的转换)。See here ;
std::nullptr_t
是空指针文字nullptr
的类型。它是一个独特的类型,本身不是指针类型或指向成员类型的指针。一般来说,任意的指针运算(即使是NULL值)几乎肯定会导致问题-你没有分配内存-它不是你试图读取或写入的。
出于比较的目的(例如,一个过去的结束),你会很好,但否则你的代码将导致未定义的行为。
更多阅读请参见Wikipedia on undefined behavior。
55ooxyrt5#
否,向nullptr添加偏移量不会导致nullptr。这是未定义的行为。