@CrazyHenry
2018-02-13T15:48:54.000000Z
字数 630
阅读 1301
ccccC++Primer
- Author:李英民 | Henry
- E-mail: li
_
yingmin@
outlookdot
com- Home: https://liyingmin.wixsite.com/henry
快速了解我: About Me
转载请保留上述引用内容,谢谢配合!
之前的例子中会让人产生一种错觉,就是:凡是没有名字的变量都是临时量,而临时量都是右值。
实际上,这句话有一半是错误的。没有名字的变量不一定是临时量,但临时量一定是右值!
更准确的理解临时量,应该是:如果能获取到该变量的地址,则该变量一定不是临时量!能获取变量的地址,则该变量一定是左值(包括const常量)!
比如下面这道题:
word_count.insert
会返回一个pair<iterator, bool>
,这个pair不是word_count的一部分,可以想见,一定不能获取到它的地址,所以pair是个右值。
通过前面的知识,.
运算符作用于右值,则返回右值,所以pair.first
是一个右值,表示指向pair<string, size_t>
的迭代器。由于可以得到迭代器的对象一定是左值,->
作用于指针对象,返回左值。因此pair.first->second
返回左值,类型为size_t
。然后++
作用于左值!
可见,pair.first->second
也是没有名字的对象,但是却是个左值!