申报地点是什么意思?

问题描述

我正在看书,在这里,给出了这样的程序-

#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...";
    }
    .
    .
    .
}

解释段说,声明语句显示 声明的位置 ,对此进行了解释

声明语句出现在首次使用已定义对象的位置。

我对该句子感到非常困惑,我无法理解其实际含义。我需要一些例子的解释。

解决方法

声明语句出现在首次使用已定义对象的位置。

另一种说法是在需要之前不要声明任何东西。这样,您便可以将声明带到使用对象的位置,这样可以更轻松地知道该对象是什么。

想象一下,您有一个1000行长的函数。如果在开始时声明了要在函数中使用的所有变量,但是直到第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);
}

两者都是有效的样式,每种样式都有其支持者和反对者。后者使用的是位于第一次使用位置的声明

在这些简单的示例中,样式上的差异确实很小。但是,对于具有(例如)100多行代码的函数,使用此类“本地”声明可以使将来的代码阅读者了解变量的性质,而不必“回滚”到该变量的开头功能。