【发布时间】:2015-05-07 08:25:29
【问题描述】:
考虑这种情况:
int *ptr;
int offset;
ptr = <some_address>;
offset = 10;
假设 offset 是 32 位变量。 ptr 的类型为 int*,目标架构是 64 位的(所以 ptr 是 8 字节的变量),offset 的类型为 int。计算表达式*(ptr + offset)的值时会进行什么转换?我在哪里可以阅读 2003 C++ 标准中的相关内容?
【问题讨论】:
-
offset变量应转换为std::ptrdiff_t。 -
我猜较小的整数变量会被提升,对于
offset或int或size_t/std::ptrdiff_t(正如 Joachim Pileborg 指出的)对于ptr -
我考虑过推广,但在 2003 C++ 标准中没有发现任何关于这个特殊情况的信息。
-
Fwiw,指针 type 应该无关紧要(谁在乎它是否指向
__int64、char或介于两者之间的任何东西)。可能存在 alignment 问题,但这似乎与您的问题无关。它是一个指针根本当然是相关的。如果您想说“假设平台数据指针是 64 位,而平台int是 32 位,您可能应该直接说出来(至少我认为您的意思是这样)。 -
@WhozCraig,编辑了问题。谢谢你的评论。
标签: c++ implicit-conversion pointer-conversion