【发布时间】:2011-06-23 20:22:25
【问题描述】:
STL 容器要求存储的值是可复制构造和可分配的。 const T 显然不是任何 T 的可分配类型,但我尝试使用它(只是好奇)并发现它可以编译,而且表现得像可分配类型。
vector<const int> v(1);
v[0] = 17;
这在 Visual Studio 2008 中成功运行并将 v[0] 分配给 17。
【问题讨论】:
-
不仅如此--VS 2010 允许您分配新值到
v[0]。试试看! -
我很好奇 VC 为 typeid(vector
::value_type).name() 提供了什么(并将其与 typeid(vector ::value_type).name( ) 或 demangle 它)。 -
一同:
int. -
VC 标准库实现中的 vector
::value_type 来自分配器 ::value_type,它对 const T 进行了部分特化,只是删除了 const: template<class _Ty> struct _Allocator_base<const _Ty>{ typedef _Ty value_type;};
标签: c++ visual-c++ stl constants visual-c++-2008