名字的作用域 scope

2021-06-10 04:49:01 字數 1232 閱讀 5394

c++程式中,每個名字都與唯一的實體(比如變數、函式和型別等)相關聯。儘管有這樣的要求,還是可以在程式中多次使用同乙個名字,只要它用在不同的上下文中,且通過這些上下文可以區分該名字的不同意義。用來區分名字的不同意義的上下文稱為作用域(scope )。作用域是程式的一段區域。乙個名稱可以和不同作用域中的不同實體相關聯。

c++語言中,大多數作用域是用花括號來界定的。一般來說,名字從其宣告點開始直到其宣告所在的作用域結束處都是可見的。例如下面的程式程式:

#includeint main()

這個程式定義了三個名字,使用了兩個標準庫的名字。程式定義了乙個名為main的函式,以及兩個名為sum和val的變數。名字main定義在所有花括號之外,在整個程式都可見。定義在所有函式外部的名字具有全域性作用域(global scope ),可以在程式中的任何地方訪問。名字sum定義在main函式的作用域中,在整個main函式中都可以訪問,但在main函式外則不能。變數sum有區域性作用域(local scope)。名字val更有意思,它定義在for語句的作用域中,只能在for語句中使用,而不能用在main函式的其他地方。它具有語句作用域(

v++中作用域可巢狀

定義在全域性作用域中的名字可以在區域性作用域中使用,定義在全域性作用域中的名字和定義在函式的區域性作用域中的名字可以在語句作用域中使用,等等。名字還可以在內部作用域中重新定義。理解和名字相關聯的實體需要明白定義名字的作用域:

#include#includestd::string s1 = "hello"; //s1 has global scope 

int main()

這個程式中定義了三個變數:string型別的全域性變數s1, string型別的區域性變數s2和int型別的區域性變數s1。區域性變數s1的定義遮蔽(hide)了全域性變數s1。

變數從宣告開始才可見,因此執行第一次輸出時區域性變數s1不可見,輸出表示式中的s1是全域性變數s1,輸出「hello world"。第二條輸出語句跟在s1的區域性定義後,現在區域性變數s1在作用域中。第二條輸出語句使用的是區域性變數s1而不是全域性變數s1, 輸出「42 world"。

c++還有另外兩種不同級別的作用域:類作用域(class scope)命名空間作用域(namspace scope)

Scope的作用域

scope描述的是sring容器如何新建bean的例項。spring的scope有以下幾種,通過 scope註解來實現 1 scope singleton 乙個spring容器中只有乙個bean的例項,為spring的預設配置,全容器共享乙個例項。這個單一例項會被儲存到單例快取中,並且所有針對該be...

作用域和作用域鏈 scope

作用域 函式建立時,生成的乙個js內部隱式屬性 函式儲存作用域鏈的容器。ao 函式執行期上下文 go 全域性執行期上下文。函式執行完成後,ao是要銷毀的。在次執行fun時會重新生成ao functiona var a 1 b var c 3a 執行說明 當a函式在定義時 模組一 系統生成了 scop...

Spring bean的作用域Scope

1.bean的常用配置項 理論上只有class是必須的 id 唯一標識 class 具體是哪乙個類 scope 範圍 constructor arguments 構造器的引數 properties 屬性 autowiring mode 自動裝配模式 lazy initialization mode ...