Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Инстанцирование с одними и теми же параметрами нарушает ODR и чем грозит?
|
|||
|---|---|---|---|
|
#18+
В проекте используется компилятор не поддерживающий external templates. Если я инстанцирую шаблонную функцию из разных единиц трансляции с одними и теми же параметрами шаблона, то каждое такое инстанцирование создаст идентичный экземпляр функции? Это нарушает принцип ODR (One Defenition Rule), и чем это грозит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2014, 14:21 |
|
||
|
Инстанцирование с одними и теми же параметрами нарушает ODR и чем грозит?
|
|||
|---|---|---|---|
|
#18+
В проекте используется компилятор не поддерживающий external templates. Э... как бы 99% компиляторов их не поддерживают. Если я инстанцирую шаблонную функцию из разных единиц трансляции с одними и теми же параметрами шаблона, то каждое такое инстанцирование создаст идентичный экземпляр функции? Да. Это нарушает принцип ODR (One Defenition Rule), и чем это грозит? Нет. Это НЕ нарушает ODR по двум причинам: -- определены функции ОДИНАКОВО (я очень надеюсь, что это именно так). -- Это -- особый случай, оговариваемый отдельно. В частности, я полагаю, что компилятор в данном случае генерирует статические функции, которые не идут в словарь глобальных ссылок или явно разбирает этот случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2014, 15:42 |
|
||
|
Инстанцирование с одними и теми же параметрами нарушает ODR и чем грозит?
|
|||
|---|---|---|---|
|
#18+
Андрей Гадалов, Инстанцирование не наружает ODR. ODR относится только к определениям - исходному тексту ф-и/класса/переменной. Нарушение - когда несколько разных определений одного и того же. Если вы все шаблоны описываете в хедерах и потом включаете эти хедеры по месту использования, то ODR не может быть в принципе нарушено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2014, 15:48 |
|
||
|
Инстанцирование с одними и теми же параметрами нарушает ODR и чем грозит?
|
|||
|---|---|---|---|
|
#18+
Андрей Гадалов, ну, и вдогонку: ISO/IEC 14882, 3.2-5There can be more than one definition of a class type (Clause 9), enumeration type (7.2), inline function with external linkage (7.1.2), class template (Clause 14), non-static function template (14.5.6), static data member of a class template (14.5.1.3), member function of a class template (14.5.1.1), or template specialization for which some template parameters are not specified (14.7, 14.5.5) in a program provided that each definition appears in a different translation unit, and provided the definitions satisfy the following requirements. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2014, 22:04 |
|
||
|
Инстанцирование с одними и теми же параметрами нарушает ODR и чем грозит?
|
|||
|---|---|---|---|
|
#18+
Ок, ясно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 01:26 |
|
||
|
Инстанцирование с одними и теми же параметрами нарушает ODR и чем грозит?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyODR относится только к определениям - исходному тексту ф-и/класса/переменной. Нарушение - когда несколько разных определений одного и того же. Даже могу писать обычные не-static определения(реализации) функции в h-файле, а затем его include-ить в разных cpp-файлах? Но почему тогда всегда рекомендуют реализации размещать в cpp-файлах, а не в h? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 01:28 |
|
||
|
Инстанцирование с одними и теми же параметрами нарушает ODR и чем грозит?
|
|||
|---|---|---|---|
|
#18+
Андрей ГадаловДаже могу писать обычные не-static определения(реализации) функции в h-файле, а затем его include-ить в разных cpp-файлах? Нет. Читайте например здесь , что можно, а что нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 02:34 |
|
||
|
Инстанцирование с одними и теми же параметрами нарушает ODR и чем грозит?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyАндрей ГадаловAnatoly MoskovskyODR относится только к определениям - исходному тексту ф-и/класса/переменной. Нарушение - когда несколько разных определений одного и того же. Даже могу писать обычные не-static определения(реализации) функции в h-файле, а затем его include-ить в разных cpp-файлах? Но почему тогда всегда рекомендуют реализации размещать в cpp-файлах, а не в h? Нет . Читайте например здесь , что можно, а что нельзя. Ну тогда "нарушение" ODR - это не только когда несколько разных определений одного и того же, а даже когда несколько одинаковых определений одного и того же потому, что h-файл то я один и тот же везде подключаю с одним и тем же определением, но вы говорите, что это тоже ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 03:18 |
|
||
|
Инстанцирование с одними и теми же параметрами нарушает ODR и чем грозит?
|
|||
|---|---|---|---|
|
#18+
Андрей Гадалов, Ну да, ODR шире чем я писал, поскольку изначально я говорил только применительно к шаблонам, о чем был исходный вопрос. Выше я привел ссылку на более подробное описание правила. Там оно тоже не полное, но для практики хватит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 04:02 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38519587&tid=2019770]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
66ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 160ms |

| 0 / 0 |
