[关闭]
@CrazyHenry 2018-02-13T15:48:54.000000Z 字数 630 阅读 1301

11.x 没有名字的变量不一定是右值(临时量)

ccccC++Primer


之前的例子中会让人产生一种错觉,就是:凡是没有名字的变量都是临时量,而临时量都是右值。
实际上,这句话有一半是错误的。没有名字的变量不一定是临时量,但临时量一定是右值!
更准确的理解临时量,应该是:如果能获取到该变量的地址,则该变量一定不是临时量!能获取变量的地址,则该变量一定是左值(包括const常量)!

比如下面这道题:
image.png-89.5kB

word_count.insert会返回一个pair<iterator, bool>,这个pair不是word_count的一部分,可以想见,一定不能获取到它的地址,所以pair是个右值。

通过前面的知识,.运算符作用于右值,则返回右值,所以pair.first是一个右值,表示指向pair<string, size_t>的迭代器。由于可以得到迭代器的对象一定是左值,->作用于指针对象,返回左值。因此pair.first->second返回左值,类型为size_t。然后++作用于左值!

可见,pair.first->second也是没有名字的对象,但是却是个左值!

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注