c++ - 将枚举传递给引用 int 的函数

标签 c++ casting enums

取消引用类型双关语

我有一个枚举

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/

相关文章:

c++ - 对类的 undefined reference

c++ - 要求基类运算符执行 "domain check"(C++)

c++ - boost asio - 检查是否有任何内容可以从串行端口读取

c++ - GLSL和c有什么区别?

c# - 是否建议为所有 C# 枚举添加后缀 "Enum"以避免命名冲突?

c# - 为什么当甚至 VS 说它是多余的时,这个转换会改变结果?

java - Java 中 <T> 和 <T extends Object> 有什么区别?

添加两个 uint8_t 时的转换警告

java - Java-捕获带有枚举的用户输入时出错

c# - 使用枚举比直接使用整数类型的好处?