В С++ определение объекта, например
int ival;
рассматривается как инструкция объявления (хотя в данном случае более правильно было бы сказать определения). Ее можно использовать в любом месте программы, где разрешено употреблять инструкции. В следующем примере объявления помечены комментарием //#n, где n – порядковый номер.
#include <fstream>
#include <string>
#include <vector>
int main()
{
string fileName; // #1
cout << "Введите имя файла: ";
cin >> fileName;
if ( fileName.empty() ) {
// странный случай
cerr << "Пустое имя файла. Завершение работы.\n";
return -1;
}
ifstream inFile( fileName.c_str() ); // #2
if ( ! inFile ) {
cerr << "Невозможно открыть файл.\n";
return -2;
}
string inBuf; // #3
vector< string > text; // #4
while ( inFile >> inBuf ) {
for ( int ix = 0; ix < inBuf .size(); ++ix ) // #5
// можно обойтись без ch,
// но мы использовали его для иллюстрации
if (( char ch = inBuf[ix] )=='.'){ // #6
ch = '_';
inBuf[ix] = ch;
}
text.push_back( inBuf );
}
if ( text.empty() )
return 0;
// одна инструкция объявления,
// определяющая сразу два объекта
vector<string>::iterator iter = text.begin(), // #7
iend = text.end();
while ( iter != -iend ) {
cout << *iter << '\n';
++iter;
}
return 0;
}
Программа содержит семь инструкций объявления и восемь определений объектов. Объявления действуют локально; переменная объявляется непосредственно перед первым использованием объекта.
В 70-е годы философия программирования уделяла особое внимание тому, чтобы определения всех объектов находились в начале программы или блока, перед исполняемыми инструкциями. (В С, например, определение переменной не является инструкцией и обязано располагаться в начале блока.) В некотором смысле это была реакция на идиому использования переменных без предварительного объявления, чреватую ошибками. Такую идиому поддерживал, например, FORTRAN.