690________________________________Часть IV. Новые возможности C++
лучшем случае встает вопрос, использовать или не использовать псевдонимы, в худшем — исправлять или нет уже написанный код, что, конечно, не очень практично.
Существует, однако, выход, который заключается во введении нового ключевого слова C++ using. Ключевое слово using позволяет указать, что все пространство целиком или некоторое определение внутри пространства перемещается на текущий уровень видимости. Такая процедура называется поднятием (hoisting), так как определения "поднимаются" с нижнего уровня пространства имен до текущего.
После того как пространство имен было поднято, уже нет необходимости уточнять использование элементов кода. Разумеется, здесь вновь возникает опасность возникновения конфликта имен, ведь компилятор позволяет поднимать определения, которые совпадают с глобальными. В случае конфликта с глобальными определениями компилятор просигнализирует об ошибке и заставит программиста выбрать необходимое имя. В случае конфликта с локальными определениями или другими пространствами компилятор не сообщит об ошибке, пока не будет предпринята действительная попытка использовать спорное определение.
Существует две формы оператора using. Первая называется объявлением using, она просто извлекает указанное определение из пространства. Его синтаксис имеет следующий вид:
using namespace::определение;
Вторая форма известна как директива using, она поднимает на текущий уровень все пространство целиком. Директива using имеет следующий вид:
using namespace имя_пространства;
Рассмотрим листинг 24.15, иллюстрирующий эти формы.
^include <iostream.h>
namespace Functions
(
void Funcl() { cout « "Функция Funcl()\n"; } void Bark() ( cout « "Bow wow!\n"; }
}
namespace Data {
int i = 56;
long z = 12L;