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);