C/C++左值性精髓(二)哪些表達式是左值,哪些是右值?-----左值表達式

左值具備對象或不完整類型,在C++中還具備函數或引用類型,可是,並不是具備上述類型的表達式就是左值,關鍵是左值必須指示一個對象,不管該對象有效或無效、完整或不完整,在C++中則包含非靜態成員函數以外的函數。例如:函數

int i;對象

int *p = &i;引用

i和p都指示一個對象,且具備對象類型,於是都是左值,而&i雖然具備對象類型,但因爲沒有指示一個對象,所以不是左值。struct

不完整類型也能夠成爲左值,由於不完整類型本質其實與對象類型同樣,只不過還沒有有完整的對象信息。前向聲明是咱們最經常使用的不完整類型,對前向聲明的引用是容許的,例如:

    extern struct S s;

     S & r = s;

雖然s的完整定義還沒有可見,但仍能夠做爲左值初始化左值引用。

相關文章
相關標籤/搜索