Что именно это значит?
Технически устарело означает, что будущий стандарт может удалить эту функцию.
На практике этого не произойдет из-за необходимости поддерживать старый код.
Таким образом, на практике это означает «сильно обескуражен».
Пример превосходства безымянного пространства имен
Пространство имен без имени обычно лучше, потому что то, что у вас есть в этом пространстве имен, может иметь внешнюю связь.
В C ++ 98 внешняя связь необходима для вещей, которые могут быть параметрами шаблона, например, если вы хотите шаблонизировать char const*
, это должен быть указатель на char
, который имеет внешнюю связь.
#include <iostream>
// Compile with "-D LINKAGE=static" to see problem with "static"
#ifndef LINKAGE
# define LINKAGE extern
#endif
template< char const* s >
void foo()
{
std::cout << s << std::endl;
}
namespace {
LINKAGE char const message[] = "Hello, world!";
} // namespace anon
int main()
{
foo<message>();
}
Тем не менее, немного противоречиво, что static
также не рекомендуется для функций.