我将名为f的联合定义为
union uf {
unsigned u;
float f;
}
我有两个功能。
void inner_function(uf& in) {
//modify in
}
void outer_function(unsigned& val) {
inner_function(static_cast<uf> (val));
}
有人可以解释一下我为什么会从'uf'类型的临时错误中获得“无效初始化类型'uf&amp; '的非常规引用。
所以我明白我不能投这个。那么有人可以如何解决这个问题呢? 我知道这有效
void outer_function(unsigned& val) {
uf a;
a.u = val;
inner_function(a);
val = a.u;
}
什么更有效率?
答案 0 :(得分:1)
static_cast<T>(x)
其中T
不是引用类型的结果是给定类型的 rvalue 。您不能将非const引用绑定到 rvalue ,从而错误。
你可以reinterpret_cast<uf&>
让编译器开心,但是你可能试图以错误的方式做某事,并且很有可能你会在那段代码中遇到未定义的行为。
有趣的问题是,你怎么认为联盟类型的演员会对你有所帮助? (也就是说,你试图解决的原始问题是什么)