对引用赋值的后增量
Post-increment in assignment to reference c++
假设我有以下代码:
int i = 2;
int &ref = i++;
现在,我明白了引用不能用右值初始化,但我不明白为什么ref
不初始化为左值,这里的意思是i
,之后i
递增。
此外,在以下情况下:
int i = 2;
const int &ref = i++;
cout << ref << endl;
显示 2
,表示ref
在递增前先用i
初始化,即用lval初始化。之后,ref
是自增的,但ref
是const。
对int
进行后加不会产生左值。假设的实现可能是这样的:
int operator++(int& i) {
int temp = i;
++i;
return temp;
}
如您所见,需要进行复制,并通过value返回。
预增量的结果是左值,因为不需要复制,所以结果是对原始值的引用。
第二个例子可以工作,因为右值可以绑定到const的引用。
i++
不返回i
,而是一个临时副本,这是在我得到增加之前采取的。这就是为什么它被称为POST增量,因为它在保留当前状态的副本后对变量进行增量。
Post对整型数加1不会返回左值。i++在自增之前返回一个临时副本
相关文章:
- 标准库类型的赋值运算符的引用限定符
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- 为什么我需要三个嵌套的大括号来调用赋值运算符,将const引用到二维数组
- 复制引用结构上的赋值
- 作为赋值(增加引用变量)C++的左操作数所需的左值
- 如果类在 C++ 中具有常量或引用类型的非静态数据成员,为什么编译器不提供默认赋值运算符?
- 返回 T 引用的 Const 函子禁止赋值
- 为什么在C++中,内建赋值返回的是非常量引用而不是常量引用
- 使用变量参数列表为传递的引用赋值(VS2010中出错)
- 在 C++ 中通过引用返回 - 引用赋值与值赋值
- 为什么不能为非常量引用赋值
- c++ 取消引用赋值是按位赋值还是按位赋值或"smart"赋值?
- 类成员作为对另一个的引用:赋值运算符中的崩溃
- c++的引用赋值相当于PHP
- Std::swap只读引用赋值错误
- 通过引用赋值对象,而不复制
- 对引用赋值的后增量
- c++指针解引用赋值
- c++构造函数初始化引用赋值
- 将一个glm::vec3常量引用赋值给另一个glm::vec3时奇怪的崩溃