【发布时间】:2012-11-18 17:17:25
【问题描述】:
以下是不好的:
vector<const int> vec;
问题是模板类型需要是可分配的。以下代码编译 [EDIT: in Visual Studio 2010],证明了上述问题:
vector<const int> vec;
vec.push_back(6);
vec[0] += 4;
对于更复杂的类型,这可能是一个严重的问题。
我的第一个问题是这种行为是否有原因。在我看来,有可能制作不允许上述内容的 const 容器和允许它的非 const 容器。
其次,有没有办法让容器以这种方式发挥作用?
第三,这里实际发生了什么(使用用户类型)?我意识到这是未定义的行为,但 STL 是如何编译它的呢?
【问题讨论】:
-
您正在以一种未定义的行为方式使用标准库。这意味着对于应该发生的事情根本没有要求。某些操作可能看起来有效,而其他操作可能无效。并且在不同的实现之间没有预期的一致性。
-
这不能在 g++ 4.6.3 上编译。
-
你的代码不能用 c++ 标准编译。
-
Visual Studio 2010 编译它。嗯。
-
我的猜测是,正确定义它应该如何为标准工作是不值得的,因为你并不经常需要这样的行为。