Быстрый для гуру: С++ 11 разрешает объявлять имена имен имен inline
. Это кажется излишним для меня; вещи, объявленные в неназванном пространстве имен, уже используются так, как если бы они были объявлены в охватывающем пространстве имен.
Итак, мой вопрос: что значит сказать
inline namespace /*anonymous*/ {
// stuff
}
и как он отличается от традиционного
namespace /*anonymous*/ {
// stuff
}
что мы знаем и любим С++ 98? Может ли кто-нибудь привести пример другого поведения, когда используется inline
?
РЕДАКТИРОВАТЬ: Просто пояснить, так как этот вопрос был отмечен как дубликат: я не спрашиваю об именах inline namespaces вообще. Я понимаю прецедент, и я думаю, что они здорово. Я специально спрашиваю, что значит объявлять неназванное пространство имен как inline
. Поскольку неназванные пространства имен обязательно всегда являются локальными для TU, рациональное управление версиями символов, похоже, не применяется, поэтому мне интересно, что делает добавление inline
.
В стороне, стандарт [7.3.1.1], касающийся неназванных пространств имен, говорит:
inline
появляется в том и только в том случае, если он отображается в определении имен без имени
но это кажется тавтологией для моих неязычных глаз адвокатов - "оно появляется в определении, если оно появляется в определении"! Что касается бонусных очков, может ли кто-нибудь объяснить, что на самом деле говорит этот бит стандартного?
РЕДАКТИРОВАТЬ: Кубби заявил о бонусной точке в комментариях:
стандарт говорит о том, что определение имени-имени-имен ведет себя так, как если бы оно было заменено на X, где
inline
появляется в X, если оно появляется в пространстве имен без имени -определение