【发布时间】:2018-07-04 01:43:43
【问题描述】:
以下代码是否可以保证正常工作?
int* arr = new int[2];
std::cout << &arr[0x100];
这被认为是一种好的做法,还是以常规方式添加偏移量会更干净?
编辑:“工作”是指它应该在 0x100 处打印指向理论成员的指针。基本上,如果这相当于“std::cout
【问题讨论】:
-
你如何定义“工作”?
-
你所做的和
arr + 0x100都同样未定义。 -
嗯。就像从数组的末尾读取 254 个条目一样?抱歉,但是阅读数组末尾的内容从来都不是干净的或好的做法。无论哪种方式也是UB。
-
@StoryTeller 我不认为它是等价的。从逻辑上讲是这样,但
&arr[0x100]等同于*(arr+0x100),它取消了地址的引用,因此是未定义的行为。arr + 0x100只是一个地址计算。 -
@Jens - 这不是我的想法。这就是 C++ 标准对指针运算的规定。