const引用指针可以更改对象
const reference to a pointer can change the object
const引用确保无法更改所指的对象。例如:
int i = 1;
const int& ref = i;
ref = 42; // error, because of a const reference
但是,如果您使用指针或unique_ptr
的引用,则可以。示例:
class TinyClass {
public:
int var = 1;
void f1() { var = 42; }
};
std::unique_ptr<TinyClass> pointer(new TinyClass);
const std::unique_ptr<TinyClass>& constRef = pointer;
constRef->f1(); // no error
我认为这是因为指针本身没有更改。但这感觉是misleading
,或者像一个简单的错误。是否有一种简单的方法来声明指针的"真实"句子?如:确保对象本身为const。
编辑:假设我不能只是更改unique_ptr的类型。现实世界的情况是,某些对象是在vector<unique_ptr<C>>
中构造的,并且某些函数获取了其元素之一的(const)引用。
const std::unique_ptr<TinyClass>& constRef
中的const
保证constRef
设置后不会指向另一个对象。它与对象本身无关。
如果要防止更改对象本身:
std::unique_ptr<const TinyClass> ptr_to_const_object;
编辑(OP的编辑之后):
您无能为力。由于有一个需要const vector<unique_ptr<C>>&
的函数,因此该函数清楚地告诉您,它需要使用指针内的对象(甚至指针)播放,但它不需要更改向量项目(例如添加新项目或删除它)。
相关文章:
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 我们可以有一个 setter 成员函数作为从 const 对象引用的 const 吗?
- C++对象引用返回不同的值
- 对象引用中的字段以不同的方法返回不同的值
- 通过向构造函数其他对象引用页面来创建对象
- 为什么在对象引用恒定时允许更改为另一个类的指针的成员变量
- 如何在C++中读取 HDF5 对象引用
- C++ 未定义的对象引用
- 从函数返回 libconfig 类设置对象引用
- qt vsaddin错误对象引用未设置为对象的istanse
- 在这种情况下,为什么使用 *此必需的对象引用返回对象引用
- 基本C - 构造contaning对象引用,并将其作为方法参数传递
- C :将对象引用作为参数给出错误:呼叫class :: function()的匹配函数
- C++OOP基础知识-是否正确返回对象引用
- 使用对象引用(可能)在调用destructor后使用对象引用
- 创建返回对象引用的成员函数的最简单方法
- 如何在C++上使用对象引用删除对象
- JNI/Android NDK-维护全局对象引用
- 为什么有些类方法返回"*this"(self的对象引用)?
- 在C++中返回伪对象引用的规则