在 C++ 中,编译以下代码:
std::pair <int, int> x;
static_cast <std::pair <const int, int>*> (&x);
给出一个错误:
error: invalid static_cast from type ‘std::pair<int, int>*’ to type ‘std::pair<const int, int>*’
我或多或少理解它为什么会发生,因为 cv 限定模板参数列表中的类型原则上可以给出“不兼容”的结果。即使在这种情况下它没有,编译器也无法知道它。
无论如何,有没有一种非黑客的方式来执行这种转换?我对使用reinterpret_cast
任何东西都持谨慎态度,因为我以前遇到过类型双关问题。另外,我不能使用临时变量,因为这是对性能至关重要的代码。
编辑:
这就是我正在做的事情。我正在实现一个与std::unordered_map
. 因此,它value_type
需要是一个pair <const key_type, mapped_type>
. 为了进行一些优化,我需要在内部将值存储为pair <key_type, mapped_type>
,而没有const
. 但是,如果我这样做,我不能(没有reinterpret_cast
)在容器上实现迭代器,因为它们需要返回对值的引用,而我只有对这些非常量对的引用。