i++ 与 ++i 的不同 解析: 已知前提: i++是先计算后自加,而++i是先自加后计算。 从上面的代码情况可以认为编译器在处理i++和++i的方式不同 结论:printf压栈的时候,i++其实压的是ebr中间结果的值,也就是一个常量。而++i 因为计算后的结果是一个左值,故会将i对应的地址进行 ...
分类:
其他好文 时间:
2018-09-04 01:46:53
阅读次数:
162
c/c++ 右值引用 转自:https://www.cnblogs.com/catch/p/3500678.html 左值(lvalue)和右值(rvalue)是 c/c++ 中一个比较晦涩基础的概念,不少写了很久c/c++的人甚至没有听过这个名字,但这个概念到了 c++11 后却变得十分重要,它们 ...
分类:
编程语言 时间:
2018-09-03 22:58:46
阅读次数:
242
今天重温C语言的指针,看的书是《C和指针》,关于左值和右值以及指针表达式的内容看得甚是迷惑与煎熬,怎么会这么难理解,指针表达式又是作为左值又一会作为右值,而且二者有着不一样的含义,为什么当年学习C语言的时候没有遇到这些头疼的问题呢?这就是没有学好C的原因吧。 功夫不负有心人,认真思考,对比总结,竟有 ...
分类:
其他好文 时间:
2018-08-28 23:54:58
阅读次数:
245
三目运算符: 在C语言中,三目运算符不能当左值使用。因为三目运算符最终返回的是一个值并不是一个变量。三目运算符作为左值时,相当于2 = 3,这种赋值,编译器当然会报错。 既然三目元算符返回的是一个值,那么有没有办法将它当做左值又不报错呢? 解决方案就是返回变量的地址。 第13行返回变量的地址。 运算 ...
分类:
其他好文 时间:
2018-08-26 12:03:06
阅读次数:
201
C++有几种复合类型,包括常见的两种:引用和指针。 1.引用 使用术语“引用”时,指的其实是“左值引用”。 引用类型引用另外一种类型。 int ival = 1024; int &refVal = ival; refVal 指向ival int &refVal2; 报错:引用必须被初始化 ~~~~~ ...
分类:
其他好文 时间:
2018-08-21 15:59:55
阅读次数:
205
赋值运算符的左侧必须是一个可修改的值(左值的一般情况) 赋值运算符满足右结合律,所以可以使用连等的方式进行赋值。 赋值运算符的优先级是比较低的,所以它一般左右才被计算。 这里需要提醒一点。赋值运算符和相等逻辑运算符千万不要弄混了,因为编译器检查不出这种错误。 这两个代码在编译过程中都是正确的,但是这 ...
分类:
其他好文 时间:
2018-08-16 20:54:58
阅读次数:
166
4.17:说明前置递增运算符和后置递增运算符的区别。 Ans:两者的作用对象都是左值运算对象,前者是将运算对象本身作为左值返回,就是将运算对象先递增再返回,后者是将运算对象的原始值的副本拷贝一份作为右值返回,实际上是先将运算对象返回,再让它递增。 4.18:如果132页那个输出vector对象元素的 ...
分类:
其他好文 时间:
2018-08-08 13:42:37
阅读次数:
137
完美转发(perfect forwarding)问题是指函数模板在向其他函数传递参数时该如何保留该参数的左右值属性的问题。也就是说函数模板在向其他函数传递自身形参时,如果相应实参是左值,它就应该被转发为左值;同样如果相应实参是右值,它就应该被转发为右值。 这样做是为了保留在其他函数针对转发而来的参数 ...
分类:
其他好文 时间:
2018-08-05 14:19:22
阅读次数:
155
在C++11中,标准库在<utility>中提供了一个有用的函数std::move,这个函数的名字具有迷惑性,因为实际上std::move并不能移动任何东西,它唯一的功能是将一个左值强制转化为右值引用,继而我们可以通过右值引用使用该值,以用于移动语义。从实现上讲,std::move基本等同于一个类型 ...
分类:
其他好文 时间:
2018-08-05 14:18:42
阅读次数:
308
三目运算符( a < b ? a : b ) c语言中的三目运算符返回的是变量值 不能作为左值使用 c++中三目运算符可直接返回变量本身 即可作为右值,也可作为左值使用 注意: 三目运算符可能返回值的值如果有一个值是常量值,则不能作为左值使用 总结: 当三目运算符的可能返回都是变量时,返回的是变量的 ...
分类:
其他好文 时间:
2018-07-29 19:01:33
阅读次数:
138