我在C++程序,我需要获得使用通过一个参数返回值的函数的枚举参数。我首先声明它是一个int,但在代码审查中被要求将它作为enum(ControlSource)输入。我这样做,但它打破了获取()函数 - 我注意到一个C样式转换为int &解决了问题,但是当我第一次尝试用一个的static_cast <修复>它并没有编译。为什么不能使用的static_cast <int&>为整数基准参数传递给在C++函数?
这是为什么,为什么是它,当eTimeSource是一个int没有施法都需要通过引用传递的整数?
//GetCuePropertyValue signature is (int cueId, int propertyId, int& value);
ControlSource eTimeSource = ControlSource::NoSource;
pPlayback->GetCuePropertyValue(programmerIds.cueId, DEF_PLAYBACKCUEPROPERTY_DELAY_SOURCE, static_cast<int&>(eTimeSource)); //This doesn't work.
pPlayback->GetCuePropertyValue(programmerIds.cueId, DEF_PLAYBACKCUEPROPERTY_DELAY_SOURCE, (int&)(eTimeSource)); //This does work.
int nTimeSource = 0;
pPlayback->GetCuePropertyValue(blah, blah, nTimeSource); //Works, but no (int&) needed... why?
“的作品,但没有(INT&)需要......为什么?” - 查看C++文档中有关通过引用传递变量的信息(或请参阅:http://stackoverflow.com/a/410857/1174378) – 2013-03-08 17:18:17
删除了双括号。 我是正确的假设是,C样式转换被调用的reinterpret_cast这个对象上,使其工作?如果是这样,对于基于int类型的枚举是否真的很重要? – Gareth 2013-03-08 18:10:53
不,“reinterpret_cast”与C型“大锤”不一样。如果你需要一个丑陋的黑色转换器来改变代码的类型,那么不要改变它的类型!它适用于'int',它不适用于枚举...似乎很清楚答案对我来说 – 2013-03-08 18:43:54