引用, 在具体实现时, 会申请一个临时空间, 目的是存放被引用对象的地址. 当使用引用变量时, 其实就是对被引用对象作了一次间接寻址.
int main()
...{
int a = 100;
int &b = a;
int *c = &a;
b = 99;
a = 88;
b = 77;
*c = 66;
return 0;
}
引用, 在具体实现时, 会申请一个临时空间(栈内空间), 目的是存放被引用对象的地址. 当使用引用变量时, 其实就是对被引用对象作了一次间接寻址. 而从汇编代码中来看, *c 确实与 b 在使用时的汇编代码一样, 都是先取地址, 再将值存入此地址. 所不同的, 只是在c++层面, 作为如 b 这样的引用类型变量, 只可在初始化时赋值, 且只能赋值一次.
例如operator=,
如果你不想(a=b)=c,你可以返回const T&
函数返回值采用“引用传递”的场合并不多,这种方式一般只出现在类的赋值函数
中,目的是为了实现链式表达。
例如
class A
{
A & operate = (const A &other); // 赋值函数
};
A a, b, c; // a, b, c 为A 的对象
a = b = c; // 正常的链式赋值2001 Page 84 of 101
(a = b) = c; // 不正常的链式赋值,但合法
如果将赋值函数的返回值加const 修饰,那么该返回值的内容不允许被改动。上例
中,语句 a = b = c 仍然正确,但是语句 (a = b) = c 则是非法的。
认为对于函数来说上面例子就可以了解大概了,对于内部类型左值就是能够被赋值的变量。
像 const int a = 0; a就不是左值了因为不能被赋值
阅读(1577) | 评论(0) | 转发(0) |