【发布时间】:2011-09-26 04:30:31
【问题描述】:
我有一个带有 std::map 指针作为成员的类。现在,我想以只读方式公开该成员:地图和指向的对象都不允许修改。在内部,我需要这些指针是非常量的,并且我想将它们公开为 const。
我确实有一个至少可以编译的解决方案,但我想知道我是否会遇到任何隐藏的问题。
class A
{
public:
const std::map<int, const float*>& GetMap() const { return *(reinterpret_cast< const std::map<int, const float*>* >( &m_Map)); }
private:
std::map<int, float*> m_Map;
};
我能想到一个可能的问题:如果 std::map 的内部布局对于指针映射和 const 指针映射是不同的,那么这将导致丑陋的错误。但我想不出任何合理的理由为什么会出现这种情况。有人知道吗?
澄清一下:我知道这是一个 hack,并且有更安全的解决方案(例如单独的访问器函数)。我只是想知道这是否会因为我缺少一些信息而立即中断。
【问题讨论】:
-
很遗憾,自动向下转换为
const的 C 风格规则并没有跟上现代 C++ 编程的步伐。 -
你可以使用一个类指针对象的映射(又名“智能指针”)来传播常量。
标签: c++ pointers stl map constants