繁体   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