簡體   English   中英

報關地點是什么意思?

[英]What is meant by locality of declaration?

我正在讀一本書,這里給出了這樣的程序 -

#include<fstream>
#include<string>
#include<vector>

int main()
{
    string filename; // #1

    cout << "Please enter name of file to open : ";
    cin >> filename;

    if(filename.empty())
    {
        cerr << "Something...";
    }
    ifstream inFile(filename.c_str());  // #2
    if(!inFile)
    {
        cerr<< "Somthing...";
    }
    .
    .
    .
}

解釋段落說,聲明聲明展示了聲明的局部性,解釋如下

聲明語句出現在第一次使用已定義對象的地方。

我對那句話很困惑,無法理解它的實際含義。 我需要一些例子的解釋。

聲明語句出現在第一次使用已定義對象的地方。

另一種說法是在需要之前不要聲明某物。 通過這樣做,您將聲明帶到使用 object 的地方,這樣做可以更容易地了解 object 是什么。

假設您有一個 function,它有 1000 行長。 如果您一開始就在 function 中聲明了您使用的所有變量,但直到第 950 行才碰巧使用其中一個變量,那么您必須向后滾動 950 行才能弄清楚該變量的類型。 如果您改為在第 949 行聲明它,並在第 950 行使用它,那么信息就在那里,您不需要那么多地尋找它。

因此,在您的示例中,#2 是在使用之前聲明的,而不是像 #1 那樣在頂部聲明。

在 C++ 模塊中有幾個不同的地方可以聲明變量。 例如,可以在該模塊的開頭聲明所有變量,如下例所示:

int MyFunc(int a, int b)
{
    int temp1, temp2, answer;
    temp1 = a + b * 3;
    temp2 = b + a * 3;
    answer = temp1 / temp2;
    return (answer % 2);
}

或者,如在您引用的代碼中,可以在每個變量首次使用之前立即聲明每個變量,如下所示:

int MyFunc(int a, int b)
{
    int temp1 = a + b * 3;
    int temp2 = b + a * 3;
    int answer = temp1 / temp2;
    return (answer % 2);
}

兩者都是有效的 styles 並且每個都有其支持者和反對者。 后者使用位於其首次使用地點的聲明

在這些簡單的例子中,styles 的差別真的很小; 但是,對於具有(比方說)100 多行代碼的函數,使用此類“本地”聲明可以使代碼的未來讀者能夠理解變量的性質,而不必“向上滾動”到該變量的開頭function。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM