首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nullptr和指针算法

nullptr和指针算法
EN

Stack Overflow用户
提问于 2016-07-22 12:31:49
回答 4查看 2.3K关注 0票数 11

考虑到下面的代码,在nullptr上执行指针算法安全吗?

我假设将任何偏移添加到另一个nullptrnullptr中,到目前为止,MSVC会像我预期的那样产生结果,但是我有点不确定像这样使用nullptr是否安全:

代码语言:javascript
复制
float * x = nullptr;

float * y = x + 31; // I assume y is a nullptr after this assigment

if (y != nullptr)
{
  /* do something */
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-07-22 12:34:45

您没有定义“安全”对您来说意味着什么,但是无论如何,您提议的代码具有未定义的行为。指针算法只允许指向数组对象的指针值,或者可能指向数组的一端。(就此规则而言,非数组对象被视为由一个元素组成的数组。)

由于空指针从来不是对象的地址或对象的过去地址,所以您的代码永远不会有定义良好的行为。

票数 11
EN

Stack Overflow用户

发布于 2016-07-22 13:07:15

代码语言:javascript
复制
is it safe to do pointer arithmetic on nullptr? 

C++ nullptr上定义了两种操作。适用于:

代码语言:javascript
复制
float * x=nullptr;
float * y=nullptr;
  1. x +/- 0 = x
  2. x-y=0 //note x and y have the same type

你不能假设什么是没有定义的,所以你不应该这么做。

票数 8
EN

Stack Overflow用户

发布于 2016-07-22 12:36:30

..。在nullptr上做指针算法安全吗?

不,nullptr上的算术没有很好地定义,因为它本身不是指针类型(但是存在所有指针类型的空值转换)。

看这里

std::nullptr_t是空指针文字nullptr的类型。它本身不是指针类型,也不是成员类型的指针,这是一个独特的类型。

一般来说,任意指针算法(即使是在空值上)几乎肯定会导致问题--您没有分配该内存--这不是您可以尝试读写的。

为了比较目的(例如,一次过了结尾),您会很好,但否则您拥有的代码将导致未定义的行为。

有关进一步阅读,请参阅未定义行为上的维基百科。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38526510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档