Быстрых один для гуру: C++ 11 позволяет неименованные пространствам имен быть объявлены inline
. Это кажется излишним для меня; вещи, объявленные в неназванном пространстве имен, уже используются так, как если бы они были объявлены в охватывающем пространстве имен.Почему встроенные неназванные пространства имен?
Так что мой вопрос заключается в следующем: что это значит сказать
inline namespace /*anonymous*/ {
// stuff
}
и как он отличается от традиционного
namespace /*anonymous*/ {
// stuff
}
, что мы знаем и любим с C++ 98? Может ли кто-нибудь привести пример разного поведения, когда используется inline
?
EDIT: Просто для уточнения, так как этот вопрос был отмечен как дубликат: Я не спрашиваю о имени встроенных пространств имен в целом. Я понимаю прецедент, и я думаю, что они здорово. Я специально спрашивать, что это значит объявить неназванного имена, как inline
. Так как безымянные пространства имена обязательно всегда локальны по отношению к ТОМУ, символу контроля версий рациональны, кажется, не применяется, поэтому мне любопытно, что добавление inline
на самом деле делают.
Как и в стороне, стандарт [7.3.1.1], в отношении неназванных пространств имен, говорит:
inline
появляется тогда и только тогда, когда он появляется в неназванных-пространство имен определения
, но это похоже на тавтологию моих неязыковых адвокатских глаз - «появляется в определении тогда и только тогда он появляется в определении»! Что касается бонусных очков, может ли кто-нибудь объяснить, что говорит этот бит стандартного?
EDIT: Cubbi утверждал бонусный балл в комментариях:
стандарт говорит, что неназванный-пространства имен определения ведет себя, как если бы оно было заменено X где
inline
появляется в X тогда и только тогда он появляется в неназванных-пространстве имен определения
Возможный дубликат [Что такое встроенные пространства имен для ?] (http://stackoverflow.com/questions/11016220/what-are-inline-namespaces-for) – Shoe
@Jefffrey, Это о * неназванных * внутренних пространствах имен. – chris
@chris, я думаю, вы можете смешать определение * unnamed * и * inline * namespaces, чтобы придумать ответ. – Shoe