这在 C++ 中可能是不可能的,但我不确定为什么。我一直在搜索堆栈溢出和谷歌,但找不到答案。
首先,我将陈述我正在研究的假设。
第一个假设:如果我在全局范围内拥有这段代码。我希望它存储在程序的数据段中,这意味着在编译时内存地址是已知的。
char const* const test1 = "test1";
第二个假设:枚举值作为符号存储在符号表中。
此代码编译:
enum class test : size_t
{
TEST0 = 123,
TEST1 = 456
};
但是,假设 size_t 在 32 位机器上是 32 位,在 64 位机器上是 64 位,我应该能够存储指针的地址。但是,这不会编译。
char const* const test1 = "test1";
enum class test : size_t
{
TEST0 = 123,
TEST1 = (size_t)test1
};
为什么这不起作用? test1 的地址在编译时应该是已知的,它应该只是保存内存地址。
这样做的目的是我能够将地址转换回指针并使用它将我的枚举转换为字符数组(即:字符串)。
最佳答案
test1
的地址在编译时是未知的(地址空间布局随机化之类的东西会影响它),并且它肯定在编译时是未知的(因为变量在链接之前不会在数据段中一起布局)。
您的问题听起来确实像是 XY 问题。如果你有一堆独特的 char*
,为什么要把它们塞进一个枚举中?它们已经代表一个枚举。
关于c++ - 有没有办法在 C++ 的枚举中存储静态指针地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64880014/