Предположим, у меня есть внешнее пространство имен, а внутри этого пространства имен есть внутреннее пространство имен std
. Это разрешено или запрещено стандартом?
namespace outer {
namespace std {
// custom implementation
}
}
Я понимаю, что это, вероятно, считается плохой практикой или что-то в этом роде, но я просто пытаюсь понять, почему реализации C ++ stl всегда определяют _STD = ::std
. Это потому, что кто-то теоретически мог сделать using namespace outer::std
? Я полагаю, это будет запрещено стандартом.
Что еще более важно, следует ли в моем коде использовать :: std?
using namespace outer
сделал быstd
неоднозначным, если бы были включены какие-либо стандартные заголовки. Но::std
не является неоднозначной. Никогда не видел, чтобы кто-нибудь использовал :: std, большинство использовали только std. Вам нужно использовать только :: std, чтобы избежать двусмысленности. Но просто не определяйте external :: std, и этого достаточно! - person QuentinUK   schedule 07.06.2020