ref
《程序設(shè)計(jì)語(yǔ)言原理第八版》第五章
cppreference.com - storage_duration
cppreference - value_category
變量屬性
變量可以使用6種屬性來(lái)刻畫(huà):名字、地址涛贯、數(shù)值诽嘉、類(lèi)型、生存期弟翘、作用域虫腋。
名字
變量可以擁有名字,也可以沒(méi)有名字如臨時(shí)變量稀余,通過(guò)名字可以訪問(wèn)變量悦冀。
地址
與變量相關(guān)聯(lián)的存儲(chǔ)地址」銮可以是數(shù)據(jù)段data segment雏门、棧stack、堆heap中的地址掸掏。
數(shù)值
變量存儲(chǔ)單元存儲(chǔ)的數(shù)據(jù)茁影。
類(lèi)型
一種類(lèi)型定義了此類(lèi)型數(shù)據(jù)的取值范圍和在其上可以進(jìn)行的操作。
生存期/存儲(chǔ)期
在變量的生存期開(kāi)始時(shí)丧凤,變量與一塊存儲(chǔ)空間進(jìn)行綁定募闲,結(jié)束時(shí)與存儲(chǔ)空間解綁。
靜態(tài)
static
修飾的數(shù)據(jù)愿待。局部靜態(tài)變量初始化語(yǔ)句只執(zhí)行一次浩螺。
棧動(dòng)態(tài)
非靜態(tài)局部變量靴患。
堆動(dòng)態(tài)
通過(guò)動(dòng)態(tài)內(nèi)存分配獲得的空間所綁定的變量。
作用域
變量的可見(jiàn)性要出。
鏈接屬性
內(nèi)部 static
外部 extern
表達(dá)式屬性
值類(lèi)別 cppreference - value_category
1. 左值
性質(zhì):
2. 亡值
3. 純右值
性質(zhì):
- 與右值相同(見(jiàn)下文)传于。
- 純右值不能多態(tài):它所標(biāo)識(shí)的對(duì)象的動(dòng)態(tài)類(lèi)型始終為該表達(dá)式的類(lèi)型囱挑。
- 非類(lèi)非數(shù)組的純右值不能有 cv 限定。(注意:函數(shù)調(diào)用或轉(zhuǎn)型表達(dá)式可能生成非類(lèi)的 cv 限定類(lèi)型的純右值沼溜,但其 cv 限定符被立即剝除平挑。)
- 純右值不能具有不完整類(lèi)型(除了類(lèi)型
void
(見(jiàn)下文),或在 decltype 說(shuō)明符中使用之外)- 純右值不能具有抽象類(lèi)類(lèi)型或其數(shù)組類(lèi)型系草。
a. 泛左值
左值
與亡值
的并集通熄。
性質(zhì):
- 泛左值可以通過(guò)左值到右值、數(shù)組到指針或函數(shù)到指針隱式轉(zhuǎn)換轉(zhuǎn)換成純右值悄但。
- 泛左值可以是多態(tài)的:其所標(biāo)識(shí)的對(duì)象的動(dòng)態(tài)類(lèi)型不必是該表達(dá)式的靜態(tài)類(lèi)型棠隐。
- 泛左值可以具有不完整類(lèi)型,只要表達(dá)式中容許檐嚣。
b. 右值
純右值
與亡值
的并集助泽。
性質(zhì):
- 右值不能被取地址:&int()、&i++[3]嚎京、&42 及 &std::move(x) 是非法的嗡贺。
- 右值不能用作內(nèi)建賦值運(yùn)算符及內(nèi)建復(fù)合賦值運(yùn)算符的左操作數(shù)。
- 右值可以用于初始化 const 左值引用鞍帝,這種情況下該右值所標(biāo)識(shí)的對(duì)象的生存期被延長(zhǎng)到該引用的作用域結(jié)尾诫睬。
- 右值可以用于初始化右值引用,這種情況下該右值所標(biāo)識(shí)的對(duì)象的生存期被延長(zhǎng)到該引用的作用域結(jié)尾帕涌。
- 當(dāng)被用作函數(shù)實(shí)參且該函數(shù)有兩種重載可用摄凡,其中之一接受右值引用的形參而另一個(gè)接受 const 的左值引用的形參時(shí),右值將被綁定到右值引用的重載之上(從而蚓曼,當(dāng)復(fù)制與移動(dòng)構(gòu)造函數(shù)均可用時(shí)亲澡,以右值實(shí)參將調(diào)用其移動(dòng)構(gòu)造函數(shù),復(fù)制和移動(dòng)賦值運(yùn)算符與此類(lèi)似)纫版。
類(lèi)型
表達(dá)式的結(jié)果的類(lèi)型床绪。