2

我正在存储一个std::mapofstd::shared_ptr<V>作为值。

从一个函数中,我想返回对该映射的引用,但是std::shared_ptr<const V>作为值类型,这可能吗?

这是我想要实现的目标:

#include <map>
#include <memory>

struct A {
    std::map<int, std::shared_ptr<int>> map;

    const std::map<int, std::shared_ptr<const int>>& ret1() const {
        return map;
    }
};

但是这段代码无法编译:

error: invalid initialization of reference of type 
'const std::map<int, std::shared_ptr<const int> >&' 
from expression of type 'const std::map<int, std::shared_ptr<int> >'

谢谢

4

1 回答 1

2

类型T和类型const T是相关的,但最终是不同的类型。如果您不希望调用者ret1修改地图中的值,则返回地图的副本,或者接受对地图的引用作为参数并将键和值复制到其中。

于 2012-12-14T08:27:21.147 回答