我有这样的东西:
void* a[] = {(void*)"Hello",(void*)1};
cout << (char*)a[0] << endl;
cout << (int)(int64_t)((int*)a[1]) << endl;
如何简化线条 (int)(int64_t)((int*)a[1])
是否可以更容易地将 void * 更改为 int?
最佳答案
void* a[] = {static_cast<void*>(const_cast<char*>("Hello")),reinterpret_cast<void*>(static_cast<omyptr_t>(1))};
std::cout << static_cast<char*>(a[0]) << std::endl;
std::cout << static_cast<int>(reinterpret_cast<intptr_t>(a[1])) << std::endl;
我认为这是所有已定义的行为。
从 void*
转换时总是转换回完全相同的状态。避免使用原始 C 类型转换,因为它可以是静态类型转换、常量类型转换或重新解释类型转换,做错一个真的会破坏事情。
考虑使用 std::any
或 boost::any
而不是原始的 void 指针;或变体,如果您知道要存储的一组固定类型。
关于c++ - void* 数组将元素转换为另一种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51774312/