【发布时间】:2019-03-11 12:40:18
【问题描述】:
考虑 STL 中的 std::map 类:
template < class Key, // map::key_type
class T, // map::mapped_type
class Compare = less<Key>, // map::key_compare
class Alloc = allocator<pair<const Key,T> > // map::allocator_type
> class map;
std::map 的迭代器返回对象类型
std::pair<const key_type, T>
这里要注意的重要一点是,该对的第一个成员是const。这意味着,以下引用分配是无效。
std::pair<key_type, T>& reference = *map_iterator; // Incorrect, key_type is not const
std::pair<const key_type, T>& reference = *map_iterator; // Correct
但是,以下表达式是有效的:
const std::pair<key_type, T>& reference = *map_iterator; // Correct, const reference is okay
因此,通过某种机制,std::pair<const key_type, T> 类型的对象可以通过const std::pair<key_type, T> 类型的引用来引用。这在逻辑上是可取的(因为std::pair 的constness 暗示了first 和second 成员的constness,这与std::pair<const key_type, T> 兼容)。
但是,我很想知道是什么 C++ 实现机制使这种兼容性成为可能。我确信有实现 std::pair 的方法,其中上述两种引用类型不兼容。
【问题讨论】:
标签: c++ stl constants std-pair