Где формулировка или основы правила «как если бы» в стандарте C ++? - PullRequest
5 голосов
/ 06 мая 2020

После небольшого поиска в Google (например, site:eel.is "as if rule") я не смог найти подходящего места, где так называемое правило «как если бы» четко прописано в стандарте C ++. Все, что я смог найти, - это то, что в тех местах стандарта, где он вызывается, дана ссылка intro.execution.

Но intro.execution, похоже, явно не ссылается на какие-либо общие форма этого правила. Я, вероятно, упускаю здесь что-то тонкое, но не могли бы вы указать мне место или места, где передается точное нормативное понимание правила? Может быть, весь intro.execution действительно предназначен для передачи того, что мы называем правилом «как будто» в дикой природе? Признаюсь, я только что просмотрел его.

Я использую этот веб-сайт для навигации по рабочему проекту стандарта.

Определение " as if "правило можно найти, например, на сайте cppreference , как что-то о том, что компиляторам разрешено выполнять преобразования в программах при соблюдении некоторых ограничений, например, по причинам оптимизации.

Ответы [ 2 ]

4 голосов
/ 06 мая 2020

Из другого Чернового стандарта может показаться, что раздел, на который вы ссылаетесь в своей ссылке , на самом деле является правилом «как если бы» (см. Сноску № 5):

1.9 Выполнение программы [intro.execution] Описание semanti c в этом международном стандарте определяет параметризованную недетерминированную абстрактную машину. Этот международный стандарт не предъявляет требований к структуре соответствующих реализаций. В частности, им не нужно копировать или имитировать структуру абстрактной машины. Скорее, соответствующие реализации требуются для имитации (только) наблюдаемого поведения абстрактной машины, как объяснено ниже. 5 . ... 5) Это положение иногда называют правилом «как если бы», потому что реализация может игнорировать любое требование этого международного стандарта до тех пор, пока результат таков, как если бы требование было выполнено, насколько это возможно. определяется из наблюдаемого поведения программы. Например, реальной реализации не требуется оценивать часть выражения, если она может сделать вывод, что ее значение не используется и что никаких побочных эффектов, влияющих на наблюдаемое поведение программы, не возникает.

PS: Одна вещь, которую я нашел «интересной» в этом цитируемом документе, - это запись в указателе для «правила как если бы»:

program execution, 8–11
    abstract machine, 8
    as-if rule, see as-if rule
4 голосов
/ 06 мая 2020

Определение правила «как если бы» дается в сноске к 4.1.1 / 1. См. http://eel.is/c++draft/intro.abstract#footnote -4 :

Это положение иногда называют правилом «как если бы», потому что реализация может игнорировать любые требования этого документа до тех пор, пока результат таков, как если бы требование было выполнено, насколько это можно определить по наблюдаемому поведению программы. Например, реальной реализации не требуется оценивать часть выражения, если она может сделать вывод, что ее значение не используется и что никаких побочных эффектов, влияющих на наблюдаемое поведение программы, не возникает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...