Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中带空指针的算术+;_C++_Pointers_Void Pointers - Fatal编程技术网

C++ C+中带空指针的算术+;

C++ C+中带空指针的算术+;,c++,pointers,void-pointers,C++,Pointers,Void Pointers,我需要访问缓冲区中由空指针指向的对象。对象位于某个偏移位置,但由于禁止对空指针进行算术运算,如何访问该对象?您可以将指针强制转换为char*(+1在该指针上偏移一个字节)或任何其他指针类型(如果更适合您的需要) 然而,这种方法非常容易出错!你最好检查一下你的设计,这里有气味空*>代码>在C++中不需要99%的情况下,使用它们的设计通常比“C++”多“C”。记住,模板和继承应该是实现这些功能的方法。为了跨语言边界的互操作,您可能有充分的理由这样做。+1绝对正确。这是一个完整的黑客和气味非常糟糕的设

我需要访问缓冲区中由空指针指向的对象。对象位于某个偏移位置,但由于禁止对空指针进行算术运算,如何访问该对象?

您可以将指针强制转换为
char*
(+1在该指针上偏移一个字节)或任何其他指针类型(如果更适合您的需要)


然而,这种方法非常容易出错!你最好检查一下你的设计,这里有气味<代码>空*>代码>在C++中不需要99%的情况下,使用它们的设计通常比“C++”多“C”。记住,模板和继承应该是实现这些功能的方法。

为了跨语言边界的互操作,您可能有充分的理由这样做。+1绝对正确。这是一个完整的黑客和气味非常糟糕的设计。或者,必须处理C API的不幸:对不起,我不明白你的意思。在执行二进制IO时,不能使用void*指针逃逸。甚至boost的内存映射api也会返回一个void*指针。只有在可以避免的情况下,避免使用void*才是一件好事。@BatchyX是的,在某些特定情况下,使用void*是无法避免的-这就是为什么我只写了99%,但我认为,OP更可能只是滥用空隙来绕过C++的强类型性质。@ Mat ZJA.BSK:这是相当屈尊的。对<代码> Value*/Cord>的算术不只是禁止的,而是毫无意义的。没有
sizeof(void)
。有趣的是(?),gcc允许对其进行算术运算,而g++似乎不允许对其进行运算。@IseWisteria:从4.7.2版开始,如果您指定
-fpermissive
,g++允许(带有警告)。