【发布时间】:2017-03-12 04:30:37
【问题描述】:
我正在编写一个在集合元素中查找对(使用特定条件)的代码。我真的不想复制集合的元素,所以我想我会使用指针对。但是,如果原始集合中的值可以更改,则这是不安全的。
在我的代码中,我想使用一个 const 引用,它只绑定到真正的常量值(因为我不想让用户滥用这些对)。但是这种方法:
using PairCollectionType =
std::vector<std::pair<std::shared_ptr<Cluster>, std::shared_ptr<Cluster>>>;
PairCollectionType getClusterPairCollection(
const std::vector<Cluster> const& clusterCollection)
{
// ...
}
-> 导致“重复'const'”的错误。我知道这可以通过指针来实现:
const ptr_type* const ptrThatBindsOnlyToConsts;
这是否也可以通过引用实现?
【问题讨论】:
-
默认情况下引用为
const。一旦你将它“引用”到某个东西,它就完成了,它总是会引用同一个对象。如果你写ref = new_object;,引用并没有改变,它只是用new_object赋值给被引用的对象。 -
const std::vector<Cluster> const& clusterCollection中&的左侧有 2 个const。你只允许一个。 -
ptrThatBindsOnlyToConsts可以指向非常量对象。例如。int x = 5; const int *const y = &x;。第二个const意味着它不能被设置为指向别的东西,除了它被初始化指向的东西。 -
如果您发布一个可以编译的MCVE,它可能会帮助人们了解您要解决的问题,但您希望它给出编译错误。
标签: c++ c++11 pointers reference constants