Может ли чрезмерное использование атрибута [[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

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