Добрый вечер.
Кто разбирается, поясните, пожалуйста, где можно найти внятное определение этого отношения (для 17го стандарта).
В [4.6.15] описываются его свойства (асимметричное, транзитивное и т.п.), а в [4.6.17] и [4.6.18] описываются отношения при вычислении подвыражений и аргументов функции.
Что-то похожее на нужное определение описано в [4.6.16]:
Every value computation and side effect associated with a full-expression is sequenced before every value computation and side effect associated with the next full-expression to be evaluated.
Однако, непонятно, что такое "next full-expression".
В частности, непонятен вот такой случай:
int a, b;
for (int i = 1; i <= 2; ++i) {
a = 1;
b = 2;
}
Тут две итерации цикла, соответственно, 4 присваивания внутри цикла.
Верно ли, что первое присваивание b = 1 sequenced-before вторым присваиванием a = 1?
Из каких конкретно пунктов стандарта следует ответ на предыдущий вопрос?
Я пытаюсь рассматривать отношения как формальную алгебру, поэтому хочу найти в стандарте формальные определения и аксиомы.
К здравому смыслу просьба не апеллировать
DTF>Добрый вечер.
DTF>Кто разбирается, поясните, пожалуйста, где можно найти внятное определение этого отношения (для 17го стандарта).
DTF>В [4.6.15] описываются его свойства (асимметричное, транзитивное и т.п.), а в [4.6.17] и [4.6.18] описываются отношения при вычислении подвыражений и аргументов функции.
DTF>Что-то похожее на нужное определение описано в [4.6.16]:
DTF>DTF>Every value computation and side effect associated with a full-expression is sequenced before every value computation and side effect associated with the next full-expression to be evaluated.
Это не определение sequenced before, а свойство full-expresion.
DTF>Однако, непонятно, что такое "next full-expression".
https://timsong-cpp.github.io/cppwp/n4659/intro.execution#def:full-expression
DTF>В частности, непонятен вот такой случай:
DTF>DTF>int a, b;
DTF>for (int i = 1; i <= 2; ++i) {
DTF> a = 1;
DTF> b = 2;
DTF>}
DTF>
DTF>Тут две итерации цикла, соответственно, 4 присваивания внутри цикла.
DTF>Верно ли, что первое присваивание a = 1 sequenced-before вторым присваиванием b = 2?
Да.
DTF>Из каких конкретно пунктов стандарта следует ответ на предыдущий вопрос?
[4.6]/16
DTF>Я пытаюсь рассматривать отношения как формальную алгебру, поэтому хочу найти в стандарте формальные определения и аксиомы.
Чем [4.6]/15 не угодил?
Здравствуйте, DTF, Вы писали:
DTF>В частности, непонятен вот такой случай:
DTF>DTF>int a, b;
DTF>for (int i = 1; i <= 2; ++i) {
DTF> a = 1;
DTF> b = 2;
DTF>}
DTF>
DTF>Верно ли, что первое присваивание b = 2 sequenced-before вторым присваиванием a = 1?
Да. Но не зависимо от ответа на данный вопрос важно помнить, что у нас нет однозначного практического способа проверить верность ответа.
Здравствуйте, DTF, Вы писали:
DTF>В частности, непонятен вот такой случай:
DTF>DTF>int a, b;
DTF>for (int i = 1; i <= 2; ++i) {
DTF> a = 1;
DTF> b = 2;
DTF>}
DTF>
DTF>Тут две итерации цикла, соответственно, 4 присваивания внутри цикла.
DTF>Верно ли, что первое присваивание b = 1 sequenced-before вторым присваиванием a = 1?
DTF>Из каких конкретно пунктов стандарта следует ответ на предыдущий вопрос?
DTF>Я пытаюсь рассматривать отношения как формальную алгебру, поэтому хочу найти в стандарте формальные определения и аксиомы.
Я думаю в этом случае было бы правильнее обращаться к описанию Iteration Statements (9.5/2):
The substatement in an iteration-statement implicitly defines a block scope (6.3) which is entered and exited each time through the loop.