C++ uintptr_存储指针的地址或其值吗?

C++ uintptr_存储指针的地址或其值吗?,c++,C++,假设我有以下代码: Foo *foo = something(); uintptr_t bar = reinterpret_cast<uintptr_t>(foo); 这里到底发生了什么?未定义的行为foo2只指向与foo相同的对象?它是一个整数值,表示foo指向的地址 如果你把它写成 uintptr_t bar = (uintptr_t)(&foo); 然后它将是foo本身的地址。这取决于强制转换应用于什么 在uintpttr_t bar=(uintpttr_t)foo

假设我有以下代码:

Foo *foo = something();
uintptr_t bar = reinterpret_cast<uintptr_t>(foo);

这里到底发生了什么?未定义的行为
foo2
只指向与
foo
相同的对象?

它是一个整数值,表示
foo
指向的地址

如果你把它写成

uintptr_t bar = (uintptr_t)(&foo);

然后它将是
foo
本身的地址。

这取决于强制转换应用于什么

uintpttr_t bar=(uintpttr_t)foo
它将
foo
(指向对象的地址)的值存储在
栏中

喜欢使用C++的转换,它们向读者传达更多的信息,在维护过程中更健壮。

uintptr_t bar = reinterpret_cast<uintptr_t>(foo);
uintpttr\u t bar=reinterpret\u cast(foo);

为了简洁起见,我使用了C风格的演员阵容。我的实际代码使用了
reinterpret\u cast
。我会纠正这个问题。你能简单地出于好奇澄清它是如何依赖于所使用的类型吗?@JonHarper例如,
reinterpret\u cast(foo)
reinterpret\u cast(&foo)
是不同的类型表达式。啊哈。这就是我要找的。
foo
的地址是
&foo
,这是一个
foo**
值。
uintptr_t bar = reinterpret_cast<uintptr_t>(foo);