金庆的专栏

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  423 随笔 :: 0 文章 :: 454 评论 :: 0 Trackbacks
比较C++数组元素引用的两种形式a[0]与0[a]

(转载请注明来源于金庆的专栏)

对于一个数组ar,求其最外层的维数。
C语言当中惯用的是 sizeof(ar) / sizeof(ar[0]),
可是在stlsoft库中是 sizeof(ar) / sizeof(0[ar])。

以前从没见过数组元素引用使用这样的形式:0[ar],能行吗?

ar[0]与0[ar]效果是一样的,其实是求地址,但是为什么用0[ar]呢?
生僻的用法降低了可读性。是不是有什么优点呢?
都是编译期计算,应该没有性能上的差别。 

后来翻看了《Imperfect C++》一书,找到了这样做的原因。

0[ar]保证输入的ar是一个数组,而不是一个定义了operator []() 运算符的类实例。
例如ar是一个std::map时,C语言中的惯用法会得出错误的结果,
但是用0[ar]这样的形式,会编译出错,防止用户错误的使用。

posted on 2008-01-02 11:27 金庆 阅读(2563) 评论(4)  编辑 收藏 引用 所属分类: 1. C/C++

评论

# re: 比较C++数组元素引用的两种形式a[0]与0[a] 2008-01-02 12:36 ngn
学习了!  回复  更多评论
  

# re: 比较C++数组元素引用的两种形式a[0]与0[a][未登录] 2008-01-02 21:54 missdeer
以前看《Imperfect C++》觉得太晦涩了,就丢下了,看来还真值得认真读一读  回复  更多评论
  

# re: 比较C++数组元素引用的两种形式a[0]与0[a] 2008-01-03 09:16 绝对零度
学习了。。  回复  更多评论
  

# re: 比较C++数组元素引用的两种形式a[0]与0[a][未登录] 2008-08-27 11:15 raof01
不明白。  回复  更多评论
  


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