powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Инстанцирование с одними и теми же параметрами нарушает ODR и чем грозит?
9 сообщений из 9, страница 1 из 1
Инстанцирование с одними и теми же параметрами нарушает ODR и чем грозит?
    #38519517
В проекте используется компилятор не поддерживающий external templates. Если я инстанцирую шаблонную функцию из разных единиц трансляции с одними и теми же параметрами шаблона, то каждое такое инстанцирование создаст идентичный экземпляр функции?
Это нарушает принцип ODR (One Defenition Rule), и чем это грозит?
...
Рейтинг: 0 / 0
Инстанцирование с одними и теми же параметрами нарушает ODR и чем грозит?
    #38519579
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В проекте используется компилятор не поддерживающий external templates.

Э... как бы 99% компиляторов их не поддерживают.

Если я инстанцирую шаблонную функцию из разных единиц трансляции с одними и теми же параметрами шаблона, то каждое такое инстанцирование создаст идентичный экземпляр функции?

Да.


Это нарушает принцип ODR (One Defenition Rule), и чем это грозит?


Нет. Это НЕ нарушает ODR по двум причинам:
-- определены функции ОДИНАКОВО (я очень надеюсь, что это именно так).
-- Это -- особый случай, оговариваемый отдельно. В частности, я полагаю, что компилятор в данном случае генерирует статические функции, которые не идут в словарь глобальных ссылок или явно разбирает этот случай.
...
Рейтинг: 0 / 0
Инстанцирование с одними и теми же параметрами нарушает ODR и чем грозит?
    #38519587
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Гадалов,

Инстанцирование не наружает ODR.
ODR относится только к определениям - исходному тексту ф-и/класса/переменной.
Нарушение - когда несколько разных определений одного и того же.

Если вы все шаблоны описываете в хедерах и потом включаете эти хедеры по месту использования, то ODR не может быть в принципе нарушено.
...
Рейтинг: 0 / 0
Инстанцирование с одними и теми же параметрами нарушает ODR и чем грозит?
    #38519921
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Гадалов,

ну, и вдогонку:
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.
...
Рейтинг: 0 / 0
Инстанцирование с одними и теми же параметрами нарушает ODR и чем грозит?
    #38520038
Ок, ясно.
...
Рейтинг: 0 / 0
Инстанцирование с одними и теми же параметрами нарушает ODR и чем грозит?
    #38520039
Anatoly MoskovskyODR относится только к определениям - исходному тексту ф-и/класса/переменной.
Нарушение - когда несколько разных определений одного и того же.
Даже могу писать обычные не-static определения(реализации) функции в h-файле, а затем его include-ить в разных cpp-файлах?
Но почему тогда всегда рекомендуют реализации размещать в cpp-файлах, а не в h?
...
Рейтинг: 0 / 0
Инстанцирование с одними и теми же параметрами нарушает ODR и чем грозит?
    #38520070
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ГадаловДаже могу писать обычные не-static определения(реализации) функции в h-файле, а затем его include-ить в разных cpp-файлах?
Нет.
Читайте например здесь , что можно, а что нельзя.
...
Рейтинг: 0 / 0
Инстанцирование с одними и теми же параметрами нарушает ODR и чем грозит?
    #38520089
Anatoly MoskovskyАндрей ГадаловAnatoly MoskovskyODR относится только к определениям - исходному тексту ф-и/класса/переменной.
Нарушение - когда несколько разных определений одного и того же.
Даже могу писать обычные не-static определения(реализации) функции в h-файле, а затем его include-ить в разных cpp-файлах?
Но почему тогда всегда рекомендуют реализации размещать в cpp-файлах, а не в h?
Нет .
Читайте например здесь , что можно, а что нельзя.
Ну тогда "нарушение" ODR - это не только когда несколько разных определений одного и того же, а даже когда несколько одинаковых определений одного и того же потому, что h-файл то я один и тот же везде подключаю с одним и тем же определением, но вы говорите, что это тоже ошибка.
...
Рейтинг: 0 / 0
Инстанцирование с одними и теми же параметрами нарушает ODR и чем грозит?
    #38520111
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Гадалов,

Ну да, ODR шире чем я писал, поскольку изначально я говорил только применительно к шаблонам, о чем был исходный вопрос. Выше я привел ссылку на более подробное описание правила.
Там оно тоже не полное, но для практики хватит.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Инстанцирование с одними и теми же параметрами нарушает ODR и чем грозит?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]