回覆列表
  • 1 # 使用者8107137581681

    規定“所有用到的變數要先定義後使用”,編譯器處理起來比較方便,不會有歧義。

    因為 C++ 裡面,相同名字的變數在【不同的作用域】裡面,是可以重複宣告的。

    注:每一對"{}"就是一個作用域。

    比如下面的程式是可以編譯透過的:

    #include

    using namespace std;

    int main(int argc, char *argv[])

    // 作用域 1 開始

    {

    int a = 1;

    // 作用域 2 開始

    {

    cout

    int a = 2;

    // 作用域 3 開始

    {

    cout

    int a = 3;

    // 作用域 4 開始

    {

    cout

    int a = 4;

    cout

    }

    }

    }

    return 0;

    }

    輸出結果為:

    1

    2

    3

    4

    --------------------------------------------------------------------------------

    如果【沒有】規定“所有用到的變數要先定義後使用”,上面的程式會怎麼樣呢?

    那麼上面這個程式就亂套了。因為可以先使用,再定義,

    輸出語句1~4 就不知道自己該用哪個變數 a 了(這裡有4個不同的 a)。

    因為不需要“先定義,後使用”,輸出語句1~4可以使用定義在任何地方的哪個變數 a 。

    這樣,編譯器就無法確定,也就無法編譯了。

    --------------------------------------------------------------------------------

    如果規定“所有用到的變數要先定義後使用”,上面的程式會怎麼樣呢?

    那麼上面這個程式可以正常執行:

    1)在輸出語句1的位置為止,只有【作用域 1 】定義了一個 a : int a=1 ,因此輸出 1 。

    2)在輸出語句2的位置為止,【作用域 1 】和【作用域 2】分別定義了一個 a :

    int a=1 ;

    int a=2 ;

    根據就近原則,使用最內層作用域的 a ,【作用域 2】裡面的 a ,輸出 2 ;

    3)在輸出語句3的位置為止,【作用域 1 】【作用域 2】和【作用域 3】分別定義了一個 a :

    int a=1 ;

    int a=2 ;

    int a=3 ;

    根據就近原則,使用最內層作用域的 a ,【作用域 3】裡面的 a ,輸出 3 ;

    同理可以分析輸出語句4。

    這就是為什麼規定“所有用到的變數要先定義後使用”的原因之一吧。

  • 中秋節和大豐收的關聯?
  • 女生學技術學什麼?