Программирование >>  Инициализация объектов класса, структура 

1 ... 137 138 139 [ 140 ] 141 142 143 ... 395


#include <vector> #include <string> #include <iterator>

int main() {

привязка istream iterator к стандартному вводу istream iterator<string> infile( cin );

istream iterator, отмечающий end-of-stream istream iterator<string> eos;

инициазация svec элементами, считаеми из cin vector<string> svec( infile, eos );

...

Правильно, этот фрагмент кода не компилируется, потому что члены пространства имен std должны использоваться с указанием их специфицированных имен. Для того чтобы исправить положение, мы можем выбрать один из следующих способов:

заменить имена членов пространства std в этом примере соответствующими снецифицированн1ми именами;

применить using-объявления, чтобы сделать видим1ми иснользуем1е члены пространства std;

употребить using-директиву, сделав видим1ми все члены пространства std.

Членами пространства имен std в этом примере являются: шаблон класса istream iterator, стандартный входной поток cin, класс string и шаблон класса vector.

Простейшее решение - добавить using-директиву после директивы препроцессора #include:

using namespace std;

В данном примере using-директива делает все члены пространства std видим1ми. Однако не все они нам нужн:. Предпочтительнее пользоваться using-объявлениями, чтобы уменьшить вероятность коллизии имен при последующем добавлении в программу глобальных объявлений.

using std::istream iterator; using std::string; using std::cin;

Using-объявления, необходим1е для компиляции этого примера, таковы:

using std::vector;

Но куда их поместить? Если программа состоит из большого количества файлов, можно для удобства создать заголовочный файл, содержащий все эти using-объявления, и включать его в исходные файлы вслед за заголовочными файлами стандартной библиотеки.



namespace Exercise { int ivar = 0; double dvar = 0; const int limit = 1000;

int ivar = 0;

void manip() {

double dvar = 3.1416; int iobj = limit + 1; ++ivar; ++::ivar;

Возьмем следующий фрагмент кода:

Каковы будут значения объявлений и выражений, если поместить using-объявления для всех членов пространства имен Exercise в точку 1? В точку 2? А если вместо using-объявлений использовать using-директиву?

В нашей книге м1 не употребляли using-объявлений. Это сделано, во-первых, для того, чтобы сократить размер кода, а во-вторых, потому, что большинство примеров компилировались в реализации С++, не поддерживающей пространства имен. Подразумевается, что using-объявления указаны для всех членов пространства имен std, используемых в примерах.

Упражнение 8.14

Поясните разницу между using-объявлениями и using-директивами. Упражнение 8.15

Напишите все необходим1е using-объявления для примера из раздела 6.14. Упражнение 8.16





1 ... 137 138 139 [ 140 ] 141 142 143 ... 395

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика