问题描述
我正在看书,在这里,给出了这样的程序-
#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多行代码的函数,使用此类“本地”声明可以使将来的代码阅读者了解变量的性质,而不必“回滚”到该变量的开头功能。