![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
二班的码农
这个作者很懒,什么都没留下…
展开
-
C++ 值类型之左值
总之,能取址的一定是左值,除位域和寄存器变量(即register变量,但最新的编译器,如gcc,遇到代码中对register变量使用&取址时,会自动转换成普通变量,即register关键字被忽略了)以外,左值皆可取址,即能使用&取址运算符。以下列表所有左值:1. 变量,函数名,成员变量名,无论其类型,即使变量类型是右值引用,其名字构成的表达式仍是左值表达式。注意:将函...原创 2019-07-19 18:35:57 · 999 阅读 · 0 评论 -
c++ notify_one()和notify_all() 误区
notify_one()(随机唤醒一个等待的线程)和notify_all()(唤醒所有等待的线程),在c++里的实现原理和java不太一致,java必须在锁内(与wait线程一样的锁)调用notify。但c++是不需要上锁调用的,如果在锁里调用,可能会导致被立刻唤醒的线程继续阻塞(因为锁被notify线程持有),但c++标准上也说,一些实现(尤其是许多 pthread 的实现)为了归避这种情况,在...原创 2019-07-19 20:15:57 · 21172 阅读 · 2 评论 -
c++11误区之std::forward和std::move
std::move并不进行任何移动,std::forward也不进行任何转发,它们都是仅仅执行强制转换的函数模板std::move是无条件将实参转换成右值,为何叫move,是告诉编译器,这个是一个右值,右值是可以移动的(如std::vector移动构造函数参数就是一个右值引用)(关于右值,详见:https://blog.csdn.net/ant2012/article/details/9782...原创 2019-08-03 23:55:22 · 792 阅读 · 0 评论 -
c++ 值类型之右值
总之,在c++表达式不是左值,就是右值。右值的特性:1 右值不能取址,如&i++是无法编译的2 右值不能赋值,即不能作为内建的赋值运算符和复合赋值运算符的左操作数。注意:此处强调的是内建,因为c++支持运算符重载,重载过的赋值运算符和复合赋值运算符,右值仍然可以作为左操作数3. 右值可以初始化const左值引用(左值介绍参见https://blog.csdn.net/ant...原创 2019-08-03 23:45:12 · 1587 阅读 · 0 评论