C++primer 2.2 變量--全局與局部

變量

注意:全局變量和局部變量的使用,以及全局變量會被局部變量所覆蓋,常考!!!


一、變量

a. 變量提供一個具名的、可供操作的存儲空間;
b. c++中每個變量都有其數據類型,數據類型決定着變量所佔的內存空間大小和佈局方式,該空間能存儲的值的範圍,以及能夠進行的運算。*


  1. 變量定義
  2. 變量列表初始化
    初始化不是賦值,初始化的含義是創建變量時賦予其一個初始值,而賦值的含義是把對象的當前值擦除,而以一個新值代替。
    初始化的幾種方式:
    a. int test=0;
    b. int test={0};
    c. int test{ 0 };
    d. int test( 0 );

  3. 默認初始化
    (一)內置類型初始化
    a. 如果定義變量沒有指定初始值,則變量被默認初始化,默認值是什麼由變量類型決定,同時定義變量的位置也會有影響。
    b. 如果是內置類型的變量未被顯示初始化,它的值由定義的位置決定!!定義在任何函數體之外的變量被初始化爲0;
    c. 定義在函數體內部的內置類型變量將不會被初始化。
    d. 未被初始化的內置類型變量值是未定義的,如果試圖拷貝或以其他形式訪問此類值將引發錯誤;

    例子:

std::string  global_str;
int global_int;
int main()
{
int local_int;
std::string local_str;
}

// 注意:global_str和local_str的初始值均爲空字符串,global_int 初始值爲0,local_int沒有初始值。

(二)類的初始化 ( 7.7.3節 類的默認初始化)

  類通過定義一個或多個構造函數來控制類對象的初始化。如果一個類有默認構造函數,則無論變量在哪兒定義,默認構造函數都會被調用。

4.變量的聲明與定義

a.  C++通過extern關鍵字聲明,向程序表明變量的類型和名字。**因爲extern是聲明,所以不分配存儲空間。**
b.   一個變量可以聲明多次,但只能定義一次
c.   如果聲明有初始化式,那麼它可以被當作是定義,即使有聲明標記extern,如:
      extern double pi=3.1415;//定義`

5.標識符

6.名字的作用域
全局變量和局部變量
作用域中一旦聲明瞭某個名字,它所嵌套着的所有作用域中都能訪問該名字,同時,允許在內層作用域中重新定義外層作用域已有的名字。
例子:

#include<iostream>
int reused=42;
int main()
{
int unique=0;
std::cout<<reused<<"  "<<unique<<std::endl; //輸出42  0
int reused=0;
std::cout<<reused<<"  "<<unique<<std::endl; //局部變量覆蓋全局變量,輸出0   0
std::cout<<::reused<<"  "<<unique<<std::endl; //使用全局作用域運算符,輸出 42  0

return 0;
}

注意:

a. 裏面因爲全局作用域本身並沒有名字,所以當作用域操作符的左側爲空時,向全局作用域發出請求獲取作用域操作符右側名字對應的變量,::reused

b. 局部變量會屏蔽全局變量的值,除非用到全局變量作用域運算符 “: :”。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章