投射地图<k,shared_ptr <v =“”>&gt;映射<k,shared_ptr <const =“”v =“”>&gt;?</k,> </k,>

时间:2012-12-14 06:39:37

标签: c++ casting const

我正在存储std::map std::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> >'

由于

1 个答案:

答案 0 :(得分:2)

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