// file1.cpp
static int I;
static void f()
{
}
// file2.cpp
static int I;
static void f()
{
}
безымянные пространства имен С++
Уважаемые форумчане, недавно прочел у Уолтера Савича, что с помощью безымянных пространств имен можно скрывать вспомогательные функции от пользователя. В связи с чем меня крайне интересует нет ли у кого примеров сего действа, на сколько это удобно, плюсы и минусы такого подхода?
Код:
альтернатива:
Код:
// file1.cpp
namespace {
int I;
void f()
{
}
}
// file2.cpp
namespace {
int I;
void f()
{
}
}
namespace {
int I;
void f()
{
}
}
// file2.cpp
namespace {
int I;
void f()
{
}
}
И кстати у тогоже Савича примеры по БПИ вроде же присутсвуют? А к книге помоему и диск прилагается - но точно не помню - это надо рытся по библиотеке
Не то чтоб прям альтернатива. Вернее они ограничивают видимость своих членов. Ну собственно это работа всех нэймспейсов. Только вот ограничивают еденицей трансляции. Тоесть конечно можно использовать на замену статическим членам, чтобы не было совпадений в разных еденицых трансляции, но суть несколько шире. Да и работает по другому.
Цитата: aks
Тоесть конечно можно использовать на замену статическим членам, чтобы не было совпадений в разных еденицых трансляции, но суть несколько шире.
Я бы сказал - нужно.
[quote=ISO/IEC 14882-2003]
[LEFT]The use of the static keyword is deprecated when declaring objects in a namespace scope (see annex D);
the unnamed-namespace provides a superior alternative.[/LEFT]
[/quote]
[LEFT]тут разжевано:
http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=210[/LEFT]
Цитата: kot_
И кстати у тогоже Савича примеры по БПИ вроде же присутсвуют? А к книге помоему и диск прилагается - но точно не помню - это надо рытся по библиотеке
К сожалению в редакции, имеющейся у меня в наличии, присутствует только упоминание о такой возможности.
не помню честно говоря. будет врямя - гляну. Если в моей редакции действительно более информации - то выложу.