Может ли чрезмерное использование атрибута [[assume]] вызвать проблемы?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Может ли чрезмерное использование атрибута [[assume]] вызвать проблемы?

Сообщение Anonymous »

Интересно, может ли использование атрибута [[assume]] иметь негативные последствия для моего кода, даже если выражения внутри него всегда истинны.
В моем коде я определил следующий макрос:

Код: Выделить всё

#ifdef DEBUG
#include 
#define ASSERT(x) assert(x);
#elifdef RELEASE
#define ASSERT(x) [[assume(x)]];
#else
#define ASSERT(x)
#endif
Это очень полезно, если определен DEBUG, но мне интересно, что произойдет, если вместо него будет определен RELEASE.
Я использую это для очень обыденных проверок, которые, возможно, не имеют значения оптимизации, например:

Код: Выделить всё

auto print_values(const std::vector& values) -> void
{
ASSERT(std::ranges::is_sorted(values));

// Print the sorted values...
}
В текущем состоянии кода утверждения всегда возвращают значение true, поэтому нет оснований опасаться неопределенного поведения в режиме RELEASE.
Должен ли я оставить этот макрос как есть или удалить случай, в котором используется атрибут [[assume]]?>

Подробнее здесь: https://stackoverflow.com/questions/798 ... e-problems
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»