通过下标访问string对象或vector对象时,返回的是该位置上第n个元素(字符)的引用,那么这些下标 即str[n]和v[n]和数组下标一样是指针吗,还是仅仅是引用?
指针是变量,引用是别名
比如,int a=0;
然后我定义指针和引用
int *p=&a;
int &b = a;
此时p是a的地址,同时&p是指针变量p的地址,所以此时&p和&a是不一样的,只是通过 *p可以访问a的值。
然而对于引用b,此时b就是a,&b就是&a,b的值也是a的值。
所以返回引用,就是返回这个数组元素本身,下标只要求访问值,也不要求改变地址,因而不需要再使用指针去指向。
一旦使用指针,那一定是操作地址
下标运算仅仅是运算符重载罢了。
std::basic_string::operator[]
std::vector::operator[]
单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!