Кто-нибудь может объяснить этот параграф текущего проекта стандарта C ++ 0x? - PullRequest
4 голосов
/ 11 апреля 2011

Может кто-нибудь объяснить это утверждение из ISO N3242 §3.2, 2-й пункт

Член набора функций-кандидатов используется odr, если он выбран разрешение перегрузки при обращении к потенциально оцененному выражению. [Примечание: это касается вызовов именованных функций (5.2.2), перегрузки операторов (Раздел 13), пользовательские преобразования (12.3.2), функция распределения для размещение нового (5.3.4), а также инициализация не по умолчанию (8.5).

Стандарт ISO 2003: говорит

Перегруженная функция используется, если она выбрана разрешением перегрузки, когда упоминается из потенциально оцененного выражения. [Примечание: это касается звонков к именованным функциям (5.2.2), перегрузка операторов (раздел 13), определяется пользователем преобразования (12.3.2), функция размещения для размещения новых (5.3.4), а также инициализация не по умолчанию (8.5).

Какая разница в этих утверждениях?

Может ли кто-нибудь объяснить это с помощью примера / программы?

Ответы [ 2 ]

7 голосов
/ 11 апреля 2011

Терминология «перегруженная функция» (слегка) неоднозначна между обращением к члену или к набору.В C ++ 11 поясняется, что функции, которые никогда не выбираются из потенциально вычисляемого выражения, не используются в odr.

Термин «используется в odr» впервые появился в C ++ 11.По сути, это означает, что данный объект может быть представлен в конечном скомпилированном двоичном файле и что применяется правило одного определения .

4 голосов
/ 11 апреля 2011

Этот абзац был изменен для исправления Основной проблемы # 1174 .Там вы можете найти пример, который показывает разницу.

...