C++函数:类型的非常量引用的初始化无效
C++ functions: invalid initialization of non-const reference of type
我将名为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&"的非常量引用的无效初始化吗?
所以我知道我不能选这个。那么,如何解决这个问题呢?我知道这是
void outer_function(unsigned& val) {
uf a;
a.u = val;
inner_function(a);
val = a.u;
}
还有更高效的吗?
其中T
不是引用类型的static_cast<T>(x)
的结果是给定类型的右值。不能将非常量引用绑定到右值,从而导致错误。
您可以执行reinterpret_cast<uf&>
以使编译器满意,但您可能试图以错误的方式执行某些操作,并且很可能会在某个地方遇到该段代码中未定义的行为。
有趣的问题是,你认为选工会类型对你有什么帮助?(也就是说,您试图解决的原始问题是什么)
相关文章:
- C++-模板嵌套类的引用初始化无效
- 在引用初始化中使用已删除的复制构造函数进行复制初始化
- 模板流运算符重载错误:引用初始化无效,与basic_istream和basic_ifstream之间的差异有关
- 具有字符串文本构造函数的类不适用于 const 引用初始化
- 类型为"短整型 (&)"的引用初始化无效
- 引用初始化和常量表达式
- 在Visual Studio 2013中为rvalue引用初始化捕获
- 从大括号括起来的初始值设定项列表进行的Lvalue引用初始化无法编译
- Visual C++ 2015 中右值的非常量引用初始化无效
- 是否可以使用对派生类实例的基类引用初始化派生类引用
- 类型'int&'的引用初始化无效,传递参数 1 时出错
- 引用初始化表单
- 从类型为"int*"的临时引用初始化类型为"int&"的非常量引用无效
- 简单的C++日志记录类-ostream引用初始化
- 错误:类型为"cv::Mat&"的非常量引用初始化无效
- 为什么我收到类型为"const vec&"的引用初始化无效
- 从类型为"char*"的临时引用初始化类型为"char*&"的非常量引用
- 为什么这会发送一个关于引用初始化无效的错误
- 为什么此处不对引用初始化执行复制初始化?
- std::vector不会为多个向量条目创建cv::Mat的新引用——初始化矩阵时,数据会被覆盖