考虑到下面的代码,在nullptr上执行指针算法安全吗?
我假设将任何偏移添加到另一个nullptr的nullptr中,到目前为止,MSVC会像我预期的那样产生结果,但是我有点不确定像这样使用nullptr是否安全:
float * x = nullptr;
float * y = x + 31; // I assume y is a nullptr after this assigment
if (y != nullptr)
{
/* do something */
}发布于 2016-07-22 12:34:45
您没有定义“安全”对您来说意味着什么,但是无论如何,您提议的代码具有未定义的行为。指针算法只允许指向数组对象的指针值,或者可能指向数组的一端。(就此规则而言,非数组对象被视为由一个元素组成的数组。)
由于空指针从来不是对象的地址或对象的过去地址,所以您的代码永远不会有定义良好的行为。
发布于 2016-07-22 13:07:15
is it safe to do pointer arithmetic on nullptr? C++ 在nullptr上定义了两种操作。适用于:
float * x=nullptr;
float * y=nullptr;x +/- 0 = xx-y=0 //note x and y have the same type你不能假设什么是没有定义的,所以你不应该这么做。
发布于 2016-07-22 12:36:30
..。在nullptr上做指针算法安全吗?
不,nullptr上的算术没有很好地定义,因为它本身不是指针类型(但是存在所有指针类型的空值转换)。
看这里;
std::nullptr_t是空指针文字nullptr的类型。它本身不是指针类型,也不是成员类型的指针,这是一个独特的类型。
一般来说,任意指针算法(即使是在空值上)几乎肯定会导致问题--您没有分配该内存--这不是您可以尝试读写的。
为了比较目的(例如,一次过了结尾),您会很好,但否则您拥有的代码将导致未定义的行为。
有关进一步阅读,请参阅未定义行为上的维基百科。
https://stackoverflow.com/questions/38526510
复制相似问题