Почему непостоянный статический член может иметь несколько определений?

C ++ вынуждает программиста определять непостоянный статический член вне класса, и причина этого, которую я продолжаю видеть, заключается в том, что если статический член был определен внутри класса, это привело бы к нескольким определениям для статического члена. Я понимаю, что наличие нескольких определений для статического члена - это плохо, но я не понимаю, откуда вообще взялись эти несколько определений. Разве инициализированный непостоянный статический член не должен просто входить в раздел данных и быть единственным определением?

struct Student {

   static int x = 4; // Why would this result in multiple definitions?

};

Кроме того, я читал в этом другом сообщении stackoverflow, что статические члены const просто встраиваются в код, где бы он ни использовался: Почему я не могу иметь в классе нецелочисленный статический константный член? Это обрабатывается препроцессором вместе со всеми остальными директивы? (Я спрошу об этом в другом посте, если нужно, но я не был уверен, стоит ли это отдельного поста).


person Kacy    schedule 22.09.2013    source источник


Ответы (1)


Это произойдет, потому что / когда ваш заголовок будет включен в несколько «единиц перевода» (подумайте о файлах .cpp).

Тогда каждый ЕП будет содержать копию определения.

Во время ссылки они столкнутся. (Компоновщик связывает объекты из каждой единицы перевода)

person sehe    schedule 22.09.2013
comment
Не могли бы вы привести пример этого? - person Kacy; 23.09.2013
comment
Я предполагаю, что OP спрашивал, почему конструкция является незаконной - person sehe; 23.09.2013
comment
@sehe Да, я об этом и спрашиваю. - person Kacy; 23.09.2013
comment
@sehe На самом деле, пример не нужен. Ваш ответ был достаточным, чтобы помочь мне понять. Спасибо. - person Kacy; 23.09.2013