在等号左边就是左值吗? 临时变量在等号左边,算左值还是右值?

bndare bndare 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

int a=1;//这个a是左值无疑吗?


int a;
a=1;
int *b;
*b=a;//这个*b是左值吗?


问题,我可以构造一个临时变量,让它出现在等号的左边,如下:

#include<iostream>
using namespace std;
struct A{
int m_i;
A(int i):m_i(i){}
A& operator=(int i){
m_i=i;
return *this;
}
A operator+(const A&other){
return A(m_i+other.m_i);
}
~A(){cout<<m_i<<endl;}
};
int main()
{
A a1(2);
A a2(3);
(a1+a2)=5;//这里的(a1+a2)是左值还是右值?
return 0;
}

上面的main函数中,a1+a2构造了一个临时变量,它出现在等号左边。那么它到底算左值还是右值,还是别的?

...全文

相关推荐

关于c++的 右值 右值引用 move

简介 第一次接触c++move操作就懵逼了,一直想探个究竟,但是右值以及右值引用思考了好长时间,就是不得要领,今天终于有所收获,写下第一篇博客,一方面为了帮助一些刚入门的朋友,另一方面也是帮助自己今后复习。 右值 左值 右值引用 左值引用 含义 左值是一个持久的量,右值是一个短暂的量。那怎么算持久怎么算短暂呢?取决于我的代码里有没有一个变量来保存他。举个例子: int i = 5; string s1(“ppap”); 都可以完成取地址的操作的操作 &i,&si; 那么定义一个左值引用,就是给这些地址起一个其他的名字罢了,地址是不会发生变化的,也就是说左值引用的本质其实还是指针: int &

weixin_38687199

浅谈C++左值引用和右值引用

下面小编就为大家带来一篇浅谈C++左值引用和右值引用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

weixin_38686041

关于i++和++i以及左值,右值

本文主要讲了关于i++和++i以及左值,右值的问题,希望对你的学习有所帮助。

weixin_38537315

C++中关于左值和右值的讨论

左值性(lvalueness)在C/C++中是表达式的一个重要属性。只有通过一个左值表达式才能来引用及更改一个对象(object)的值。(某些情况下,右值表达式也能引用(refer)到某一个对象,并且可能间接修改该对象的值,后述)。何谓对象?如果没有明确说明,这里说的对象,和狭义的类/对象(class/object)相比,更为广泛。在C/C++中,所谓的对象指的是执行环境中一块存储区域(a regionofstorage),该存储区域中的内容则代表(represent)了该对象的值(value)。注意到我们这里所说的"代表",对于一

weixin_38674616

C++11中的左值引用和右值引用

1.首先区分左值和右值   左值是表达式结束后依然存在的持久对象   右值是表达式结束时不再存在的临时对象   便捷方法:对表达式取地址,如果能,则为左值,否则为右值   举例:   int a = 10   int b = 20   int *pFlag = &a   vector vctTemp   vctTemp.push_back(1)   string str1 = "hello"   string str2 = "world"   const int &m = 1   请问:a,b,a+b,a++,++a,pFlag,vctTemp[0],100

weixin_38682953
评论 10
收藏 已收藏
分享
返回顶部
bndare
C++ 语言 65,214 成员 250,514 内容