随笔-34  评论-108  文章-0  trackbacks-0

vector<const int> cVec;
 cVec.push_back(10);
 cVec.push_back(20);

 int& firstVal = cVec.front();

 cout<<"The first element is :"<<firstVal<<endl;

 firstVal++;

 firstVal = cVec.front();

 cout<<"The first element is :"<<firstVal<<endl;

     鬼使神差的写了上面的代码,发现这样很容易改变了vector中的第一个元素的值,即使vector的模板参数是const int,不知道是忽略了这个问题,还是有别的目的,希望各位对STL有深入研究的人,指教下,谢谢!

posted on 2007-06-05 18:15 探丫头 阅读(1266) 评论(8)  编辑 收藏 引用 所属分类: 编程语言——C++

评论:
# re: vector中存放const变量是否有意义 2007-06-06 10:38 | Mickey Mouse
在老公的帮助下,终于搞明白了这个问题
标准容器内部利用了模板支持偏特化的特性
template<class _Ty>
struct my_Allocator_base
{
typedef _Ty value_type;
};

template<class _Ty>
struct my_Allocator_base<const _Ty>
{
typedef _Ty value_type;
};

即使传递的模板参数是const _Ty,value_type的类型依然是_Ty
由此看来,给标准容器传递const T的确是没有意义的  回复  更多评论
  
# re: vector中存放const变量是否有意义[未登录] 2007-06-06 17:19 | pass86
恩,是个知识点,细致入微,
学到了。
你俩都学C++阿。  回复  更多评论
  
# re: vector中存放const变量是否有意义 2007-06-06 18:12 | Mickey Mouse
@pass86
是的  回复  更多评论
  
# re: vector中存放const变量是否有意义 2007-06-07 12:53 | pass86
我用GCC编译不过去,  回复  更多评论
  
# re: vector中存放const变量是否有意义 2007-06-07 13:19 | Mickey Mouse
这段代码在vc6也编译不过,用2003以上版本就能编译过了
这个是标准C++的东西,如果用的编译器对标准C++支持的不好的话,可能会编译不过,可能对偏特化不支持  回复  更多评论
  
# re: vector中存放const变量是否有意义 2007-06-07 20:59 | 沐枫
夫妻俩人估计要么是同学,要么是同事  回复  更多评论
  
# re: vector中存放const变量是否有意义 2007-06-08 08:20 | Mickey Mouse
@沐枫
呵呵,大家就别猜这个了,还是有空多总结总结技术文章,大家共享下资源吧  回复  更多评论
  
# re: vector中存放const变量是否有意义 2008-01-28 17:33 | 浪迹天涯
看看《Effective STL》  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理