【发布时间】:2011-05-19 14:40:06
【问题描述】:
在 C++ 中,对取消引用的指针的引用地址是否保证与指针的地址相同?
或者,用代码编写,是否保证以下断言始终成立?
SomeType *ptr = someAddress;
SomeType &ref = *ptr;
assert(&ref == ptr);
【问题讨论】:
-
@dlev:他怎么可能“尝试”是否保证相同?如果他只想知道对于一个特定程序在一个特定 C++ 实现上的一次特定运行是否相等,他为什么要问它是否有保证?
-
@Steve 显然他不能,但是运行几次应该足以让你相信这是真的。也就是说,你是对的,他确实说保证。
-
代码正确,问题比较“有问题”。我会将“指针的地址”读作
&ptr,这与指向的对象的地址不同。 -
@dlev:在此基础上,我确信
sizeof(int) == sizeof(void*)是有保证的。我预测未来会很糟糕;-)。我们只知道尝试 Jesper 的assert会给出正确的答案,因为我们碰巧知道您在任何地方都会得到相同答案的根本原因。但如果你不知道它在任何地方都是一样的,那么你就不能依赖测试。如果你确实知道它在任何地方都是一样的,那么你就已经知道问题的答案了...... -
@Steve 可能出了什么问题?无论如何,这只是字节。
标签: c++ pointers reference memory-address