天天看點

《c++語言導學》——1.6 作用域和生命周期

本節書摘來自華章計算機《c++語言導學》一書中的第1章,第1.6節,[美] 本賈尼·斯特勞斯特盧普 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

聲明語句把一個名字引入它的作用域中:

局部作用域(local scope):聲明在函數(見1.4節)或者lambda(見5.5節)内的名字稱為局部名字(local name)。局部名字的作用域從聲明它的地方開始,到聲明語句所在的塊的末尾為止。塊(block)的邊界用花括号{ }表示。函數參數的名字也屬于局部名字。

類作用域(class scope):如果一個名字定義在類(見2.2節,2.3節,第4章)的内部,同時位于任何函數(見1.4節)、lambda(見5.5節)和enum class(見2.5節)的外部,則我們把這個名字稱為成員名字(member name)或者類成員名字(class member name)。成員名字的作用域從它的括起聲明的左側花括号{開始,到該聲明結束為止。

命名空間作用域(namespace scope):如果一個名字定義在命名空間(見3.3節)的内部,同時位于任何函數、lambda(見5.5節)、類(見2.2節,2.3節,第4章)和enum class(見2.5節)的外部,則我們把這個名字稱為命名空間成員名字(namespace member name)。它的作用域從聲明它的地方開始,到命名空間結束為止。

聲明在所有結構之外的名字稱為全局名字(global name),我們說它位于全局作用域(global namespace)中。

某些對象也可以沒有名字,比如臨時對象或者用new(見4.2.2節)建立的對象。例如:

《c++語言導學》——1.6 作用域和生命周期

https://yqfile.alicdn.com/b122dc93c0b2a0a06034da343fc2c7332b3759b5.png

" >

我們必須先建構(初始化)對象,然後才能使用它,對象在作用域的末尾被銷毀。對于命名空間對象來說,它的銷毀點在整個程式的末尾。對于成員對象來說,它的銷毀點依賴于它所屬對象的銷毀點。用new建立的對象一直“存活”到delete(見4.2.2節)銷毀了它為止。

繼續閱讀