c++ - 为什么我不能使用 static_cast<int&> 将整数引用参数传递给 C++ 中的函数?

标签 c++ pass-by-reference static-cast

我在 C++ 程序中有一个枚举参数,我需要使用一个通过参数返回值的函数来获取它。我首先将其声明为 int,但在代码审查时被要求将其键入为枚举 (ControlSource)。我这样做了,但它破坏了 Get() 函数——我注意到 C 风格的转换为 int& 解决了这个问题,但是当我第一次尝试用 static_cast<> 修复它时,它没有编译。

为什么会这样,为什么当 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?

最佳答案

当您将变量转换为不同类型的值时,您会获得一个临时值,该值不能绑定(bind)到非常量引用:修改临时值毫无意义。

如果您只需要读取值,常量引用应该没问题:

static_cast<int const &>(eTimeSource)

但您也可以只创建一个实际值,而不是一个引用:

static_cast<int>(eTimeSource)

关于c++ - 为什么我不能使用 static_cast<int&> 将整数引用参数传递给 C++ 中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15299458/

相关文章:

C++ 转换 : have pointer to object member, 计算指向对象的指针

c++ - 当不应调用构造函数时,复制参数会调用已删除的构造函数

c++ - pImpl 是否从根本上解决了 C++ DLL 问题?

c++ - 为什么不能在 C++11 或更高版本的函数声明中定义结构?

c - 为什么仅使用此 C 程序的参数列表中声明的指针即可通过引用传递?

c++ - 为什么static_cast转换无效?

c++ - 使用数组时的常见陷阱 : Trusting type-unsafe linking

c++ - 使用引用传递字符串需要进行哪些必要的更改

c++ - 重载赋值运算符 : if we return (*this),,它是指针/地址处的值,赋值运算符的正确语法是什么?

c++ - 带有 boost::shared_ptr 的 static_cast?