@hirthwork

hirthwork

Меня зовут Пить
hirthwork

Всего лишь бабочка, которой снится, что она программист

Славный отзывчивый парень © https://t.me/point_im/161357

32 я читаю 94 меня читают
5704 постов
47424 комментариев
hirthwork
11 Oct 2019

Допустим есть функция bool f(void** p), которая меняет где-то внутре делает *p = new_p;
Допустим есть конструкция:
if (f(&p) && f(&p)) {...}
Правильно ли я помню, что стандарт не гарантирует, в каком порядке будут вычислены оба &p и может оказаться так, что порядок вычислений может быть как &p f(..) &p f(..) так и &p &p f(..) f(..)?

Рекомендовано: E23
11 Oct 2019

Если я не ошибаюсь, то гарантируется, что первая f(&p) будет левая, а потом правая.
И в твоем случае все будет ок. Нет порядка для вычисления аргументов функции, например:

foo( shared_ptr<Widget>(new Widget), bar() );

может вызвать в разном порядке: new Widget, bar() и shared_ptr<Widget>. В таком случае, если bar() кидает исключение, то Widget не успеет попасть в шаредптр

Комментарий был отредактирован в 20:36:28 11.10.2019
#zhnmw/1

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.