C++返回常量对象之外的非常量引用
C++ returning non const reference out of const object
我有一个包含引用的结构
template <class T>
struct RefContainer {
RefContainer(T& t) : _r(t) {}
T& getRef() {
return _r;
}
private:
T& _r;
};
现在,另一个对象,它是不可变的,在它自己内部使用这个结构,并且其中有这样的对象:
RefContainer<char> _c;
当我使用那个不可变的对象用一个点来转换它自己时,我得到了一个const引用。由于我在不可变对象中调用了RefContainer对象的getRef,编译器说我违反了const正确性。
RefContainer本身必须包含非常量左值引用,但我希望对不可变对象进行链式调用,以创建新的调用,如
ImmubableObject obj;
auto newObj = obj.copyWithSomeAttributes().modifyWithThisString("str");
// I'm on C++11 btw, so I can use everything C++11 has to offer
如何以"正确"的方式计算(可能避免丑陋的const类型转换)?
你应该试试这样的东西:
template <class T>
struct RefContainer {
RefContainer(T& t) : _r(t) {}
T& getRef() const {
// ^^^^^
return _r;
}
private:
T& _r;
};
这样,无论RefContainer
实例是否为const
对象,T&
引用都可以用作非常数。
相关文章:
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 什么时候在C++中返回常量引用是个好主意
- 代理对象的常量正确性
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 通过多个头文件使用常量变量
- 在cuda线程之间共享大量常量数据
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 是默认情况下分配给char数组常量的值
- 私有类型的静态常量成员
- OpenGL大的3D纹理(>2GB)非常慢
- 类似枚举的计算常量
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 使用常量键但非常量值进行映射
- 为什么`is_open()`非常常量
- 从getter方法返回常量和非常量值
- 阻止const类函数在引用成员上调用非常常量类函数
- C++初始化非常大的常量数组,最佳实践
- 提高c++中非常大的常量的可读性