比较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]这样的形式,会编译出错,防止用户错误的使用。