取消引用类型双关语
我有一个枚举
enum AgentStatus { kSTOPPED = 0, kRUNNING, kIDLE, kNAGENTSTATUS };
我需要将它传递给具有许多重载变体的外部库的函数。我想将它传递给第二个参数:
DimService::DimService(const char*, int&);
DimService::DimService(const char*, char*);
...
如果我对我的枚举变量进行 (int&) 转换,我会收到臭名昭著的警告:
warning: dereferencing type-punned pointer will break strict-aliasing rules
如果我对 (int) 进行强制转换,我会得到这个
invalid conversion from ‘int’ to ‘char*’
error: initializing argument 2 of ‘DimService::DimService(const char*, char*)’
什么是正确的方法?
最佳答案
当您在使用内联转换时遇到问题时,将其拆分为单独的一行会很有帮助:
const AgentStatus enumValue = kRUNNING;
...
int intValue = static_cast<int>(enumValue);
DimService("works now", intValue);
关于c++ - 将枚举传递给引用 int 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14897311/