- 411
- 267
Прямое право он имеет) https://en.wikipedia.org/wiki/As-if_rule https://en.cppreference.com/w/cpp/language/as_ifкого опускает? кто он такой чтобы опускать? какое у него право?
Как простой пример - https://godbolt.org/z/o9vsGr
memset растворился даже при минимальной оптимизации (-O(1))
Именно по этой причине в языке c++ существует такое большое количество неопределенных (иногда unspecified, или implementation-defined) поведений по типу порядка вычисления аргументов и множества других, а также есть ключевое слово volatile.
Плюс еще, для таких задач, как, например, эта с memset, есть специальные функции под платформы:
Win - SecureZeroMemory, BSD - explicit_bzero, Linux Kernel - memzero_explicit, OpenSSL - OPENSSL_cleanse и т.д.
Специальная версия функции в стандарте С11 memset_s - https://en.cppreference.com/w/c/string/byte/memset
И еще и флаги компиляторов по типу -fno-builtin-memset, или #pragma optimize("", off)
Ну и volatile
Посмотрите еще этот ответ, вопрос был похожий - https://www.blast.hk/threads/781/page-294#post-439421Что по-вашему эффективнее и лучше использовать в памяти: std::fill или memset?