数组与指针-下标索引操作符的交换性
2014-09-09 17:11
218 查看
内建的下标索引操作符的可交换性,不管是数组还是指针,它们的下标索引表达式都可以“反过来写”,像这样:正常写法 int ar[5]; int *p = ar;求 a
或p
的值。 另类写法:求n[ar]和n[p]的值。
为什么会有n[ar]或n[p]的这种写法?它在作为C++的另一个领域----泛型编程中确实可以带来一个实际的好处。这种下标索引的可交换性只对内建的下标索引操作符有效,这一限制可以用于约束一段代码只对数组或/指针有效,而拒绝重载了下标索引操作符的类类型。具体做法像这样:
[/code]
或p
的值。 另类写法:求n[ar]和n[p]的值。
为什么会有n[ar]或n[p]的这种写法?它在作为C++的另一个领域----泛型编程中确实可以带来一个实际的好处。这种下标索引的可交换性只对内建的下标索引操作符有效,这一限制可以用于约束一段代码只对数组或/指针有效,而拒绝重载了下标索引操作符的类类型。具体做法像这样:
[code]template<typename T>void reject_subscript_operator(T const &t)
[/code]
{
sizeof(t[0]); // 如果T不能进行下标索引的话,编译器就会在这里打住
sizeof(0[t]); // 如果T只能支持用户自定义的下标索引操作符,编译器也会在这里报错
}
void reject_subscript_operator( void const * const)
{
}
void reject_subscript_operator(void *)
{
}
int _tmain(int argc, _TCHAR* argv[])
{
void *pv = &pv;
void const *pcv = pv;
int ai[100];
int *pi = ai;
Pointer ptr;
Subscript subscr;
reject_subscript_operator(pv);
reject_subscript_operator(pcv);
reject_subscript_operator(ai);
reject_subscript_operator(pi);
reject_subscript_operator(ptr);
reject_subscript_operator(subscr); // error
return 0;
}
相关文章推荐
- 不知道数组索引名的情况下如何访问对应下标的值
- 指针碰到数组,不指定下标就默认保存数组的首地址,数组名本身就是首地址
- 实验9 指针1 、程序填空:下列程序在数组中同时查找最大元素和最小元素的下标,分别存放在 main()函数的max 和 min 变量中。要求:根据运行结果分析程序和填空,并注释说明填充依
- C++ 中数组的指针和下标
- 数组和指针可交换性总结
- c++中如何使二级指针能够像数组下标模式访问
- c++之Vector容器数据两种取值方法(指针访问,数组下标访问)
- [编程题]用递归求数组最大值的位置(索引,下标)
- 关于ImageView定义数组,索引下标递增求余的原因分析
- 切分 字符串指针数组(如环境变量) 的两种方法, 数组下标 和 指针
- 重载数组下标操作符,使用operator
- 自增自减操作符的前后缀,下标和解引用操作与自增自减一起使用,还有指针加减法的实现--围绕CheckedPtr类
- 数组的下标访问和指针访问方式效率分析比较
- 比较数组下标操作与指针操作的速度(将程序转换成汇编程序)
- 实验九指针1、程序填空:下列程序在数组中同时查找最大元素和最小元素的下标,分别存放在 main()函数的max 和 min 变量中。要求:根据运行结果分析程序和填空,并注释说明填充依据。
- c++ 基础 指针访问数组两种方法 下标法 指针法
- MATLAB中通过矩阵索引值求元素下标以及转为C语言数组下标
- VC结构体实现类似数组的下标操作符功能
- C++中数组的下标和指针