将枚举成员分配给void指针?

时间:2017-03-03 16:33:13

标签: c++

我有一个void指针,必须保存一些信息,我想根据我的枚举将它分配给一个int。我希望这个整数一直可用,以便void指针不指向“垃圾”。 这是代码:

enum type {nc, ns, nd};

void* thatType;

thatType = &nc

结果是,我得到了这个错误:表达式必须是左值或函数指示符 那么“nc”是一个实际的变量还是就像0的整数占位符一样?  如果我这样做了:

thatType = (int*)nc

首先,为什么这不会给我一个错误呢?

1 个答案:

答案 0 :(得分:0)

这是两件非常不同的事情。

&nc

这是试图获取一个枚举器的地址,但是枚举器不是对象,也没有地址。这就像尝试写&42来获取文字42的地址一样。只有字符串文字才有地址(或多或少)。

(int*)nc

另一方面,这是取整数值nc(即0)并将其转换为指针。基本上你是在写(int*)nullptr。这是合法的,虽然有问题(这就是为什么,在C ++演员阵容中,只有reinterpret_cast会在这里编译)。

特别注意您没有写(int*)&nc

  

它是否像占位符一样工作为0的整数?

基本上,是的,那是对的。