[英]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.