2015-09-02 2 views
-1

Я реализую шаблон, который имеет статическую переменную-член, после чтения стандартного шва правильно определить переменную в файле .h, но файл .h включен в несколько .cpp, поэтому почему статическая переменная не является множественное определение?Почему это не дублирующее определение переменной-члена?

Любая ссылка в стандарте для этого?

14.5.1.3 в N3376

Определение для статического элемента данных могут быть предоставлены в пространстве имен объема вмещающего определение шаблона класса статическому члена. [Пример:

template<class T> class X { static T s; };

< template<class T> T X<T>::s = 0; ------------- Вопрос здесь.

-end пример]

ответ

2

Поскольку это шаблон. Когда вы создаете экземпляр статического члена, он будет определен, но имплицитные экземпляры могут быть определены в нескольких единицах перевода.

[basic.def.odr]/6

Там может быть более одного определения типа класса (раздел 9), типа перечисления (7.2), встроенный функции с внешним связыванием (7.1.2), шаблон шаблона (раздел 14), шаблон нестатической функции (14.5.6), статический элемент данных шаблона класса (14.5.1.3), функция-член шаблона класса (14.5.1.1) или шаблон специализация для , в которой некоторые параметры шаблона не указаны (14.7, 14.5.5) в программе, при условии, что каждое определение появляется в другой единицы перевода и при условии, что определения удовлетворяют fo требования к снижению.

Смежные вопросы