C/C++左值性精髓(二)哪些表达式是左值,哪些是右值?-----左值表达式
左值具有对象或不完整类型,在C++中还具有函数或引用类型,但是,并非具有上述类型的表达式就是左值,关键是左值必须指示一个对象,无论该对象有效或无效、完整或不完整,在C++中则包含非静态成员函数之外的函数。例如: int i; int *p = &i; i和p都指示一个对象,且具有对象类型,因而都是左值,而&i虽然具有对象类型,但由于没有指示一个对象,因此不是左值。 不完整类型也可以成为左值,因为不完整类型本质其实与对象类型一样,只不过尚未有完整的对象信息。前向声明是我们最常用的不完整类型,对前向声明的引用是允许的,例如: extern struct S s; S & r = s; 虽然s的完整定义尚未可见,但仍可以作为左值初始化左值引用。 来源: oschina 链接: https://my.oschina.net/u/154959/blog/56311