既然C++11有了std::array,为什么还要搞一个std::initializer_list类型?

zerueiru 2016-06-12 10:09:20
std::initializer_list的内部实现也是指向一个匿名的数组,为什么不干脆都只用std::array的C风格数组呢? 感觉用两个不同的概念可以表示的东西是同一个。
为什么const_cast不能直接把一个左值变成非const,非得是指针或者引用?
...全文
349 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fefe82 2016-06-12
  • 打赏
  • 举报
回复
指针和引用也可以是左值。 一个值(左值、右值)经过一个运算符操作,必然会变成另一个值。但两个值可能对应的是同一个对象。(左值、右值是对表达式结果性质的描述,不是对对象的描述)
paschen 版主 2016-06-12
  • 打赏
  • 举报
回复
lunat 2016-06-12
  • 打赏
  • 举报
回复
std::initializer_list是一个轻量级对象,它指向一个临时常量数组,但不保持该数组,对它进行复制也不会产生内容的复制; std::array它保持他所持有的数组(里面可以不是常量),对它进行复制会导致内容的复制。它设计用来代替传统的定长数组(保持高效率,与其它容器提供一致的访问界面,且可以解决数组传递退化成指针的问题)。 std::initializer_list看名字也知道,它设计就是用来做初始化列表的,用来给其它容器做间接层,它的实现是编译器特殊支持的,你自己无法实现同样的功能;std::array就是基于正常的语法,你完全可以实现你自己的同样功能的array。
lm_whales 2016-06-12
  • 打赏
  • 举报
回复
强制转换获得的是一个新值。 被改变的是表达式的结果,不是构成表达式的对象。 是从表达式的值,获得一个跟他关联的另一个值。
lm_whales 2016-06-12
  • 打赏
  • 举报
回复
右值有很多种 其中 字面值 如 1,2,3 等 是纯右值

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧