我在c ++源文件(不是标题)中找到了以下语法:
template <typename Type_> static void aFunction(Type_ &function, ...) {
uintptr_t value(astruct.val); //confusing
}
这个令人困惑的问题是否有价值宣言?我尝试写一个你好的世界计划,如:
int main(){ uintptr_t a(80); return 0;}
并且它在数字常量之前返回一个预期的声明说明符或'...',我可以知道这个令人困惑的行做了什么吗?谢谢!
编辑:我想我应该透露完整的功能声明:
template <typename Type_>
static void nlset(Type_ &function, struct nlist *nl, size_t index) {
struct nlist &name(nl[index]);
uintptr_t value(name.n_value);// this is the confusing line
if ((name.n_desc & N_ARM_THUMB_DEF) != 0)
value |= 0x00000001;
function = reinterpret_cast<Type_>(value);
}
答案 0 :(得分:2)
如您所知,std::uintptr_t
是标题<cstdint>
中的标准类型(自C ++ 11起)。
您不理解的行是一个简单的变量声明+定义:
uintptr_t value(name.n_value);
这声明了一个名为value
的{{1}}类型的变量,并使用uintptr_t
的值对其进行初始化。对于基本类型,这相当于:
name.n_value
我尝试编写一个hello world程序,如:
uintptr_t value = name.n_value;
并返回错误[...]
什么错误?始终发布您收到的错误消息,没有人可以帮助您“我收到错误”!
我怀疑你得到的错误是由于int main(){ uintptr_t a(80); return 0;}
没有定义,除非你包含uintptr_t
,然后你应该使用<cstdint>
命名空间前缀。
答案 1 :(得分:1)
uintptr_t是无符号整数(至少)指针的大小。
虽然它不是原生类型,但您需要包含<stdint.h>
或<cstdint>
将int指针转换为整数变量并将它们存储为整数变量实际上是“邪恶的”,但是有许多“遗留”代码可以完成它并依赖它,所以你需要一个足够大的int大小来存储它。
将它们存储为整数可以让你做“安全”但不能用指针做的事情,比如当它们不属于同一范围时比较它们,以便在内存泄漏检查器中使用它们,等