sequenced-before
От: DTF  
Дата: 08.06.19 16:10
Оценка:
Добрый вечер.
Кто разбирается, поясните, пожалуйста, где можно найти внятное определение этого отношения (для 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?

Из каких конкретно пунктов стандарта следует ответ на предыдущий вопрос?

Я пытаюсь рассматривать отношения как формальную алгебру, поэтому хочу найти в стандарте формальные определения и аксиомы.
К здравому смыслу просьба не апеллировать
Re: sequenced-before
От: DTF  
Дата: 08.06.19 16:13
Оценка:
DTF>Верно ли, что первое присваивание b = 1 sequenced-before вторым присваиванием a = 1?

опечатка. Имелось в виду первое присваивание b = 2
Re: sequenced-before
От: σ  
Дата: 10.06.19 09:31
Оценка:
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 не угодил?
Re: sequenced-before
От: B0FEE664  
Дата: 11.06.19 12:45
Оценка:
Здравствуйте, 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?

Да. Но не зависимо от ответа на данный вопрос важно помнить, что у нас нет однозначного практического способа проверить верность ответа.
И каждый день — без права на ошибку...
Re: sequenced-before
От: rg45 СССР  
Дата: 13.06.19 12:56
Оценка:
Здравствуйте, 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.

--
Не можешь достичь желаемого — пожелай достигнутого.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.