Re: static vs unnamed namespace
От: MuTPu4  
Дата: 14.08.06 19:50
Оценка:
M>vc7.1

M>первый вариант:

M>...
M>в бинарнике получаем две переменные sign и две функции foo() (одна заинлайнена)
Не совсем ясно, что означает появление переменной sign в бинарнике, т.к. она не имеет связывания. Если же речь идет о числовом литерале 0xC0DEC0DE, то понятие связывания к нему неприменимо и его представление определяется реализацией, на моей VC 7.1 константа подставляется непосредственно в код каждой из функций foo.

M>второй вариант:

M>...
M>в бинарнике получаем одну переменную sign и одну функцию foo()
Это странное поведение, в asm-листинге и объектных файлах я получил по 2 независимых экземпляра foo на доступных мне компиляторах, в том числе на VC 7.1, как и ожидалось. В имя foo после декорирования тем или иным образом включается уникальный идентификатор единицы трасляции. Возможно, линкер оказался достаточно умным, чтобы выкинуть дублирующиеся определения, пока в коде нет взятия адреса.

M>получается используя unnamed namespace теперь можно преспокойно define любые функции в *.h instead of *.cpp?

Во всяком случае, это не будет прямым нарушением ODR.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.