Оптимизация константных выражений: можно ли определить длину строки во время компиляции?
В поисках оптимизации кода разработчик пытается вычислить длина строкового литерала во время компиляции с использованием рекурсивной функции. Эта функция оценивает строку посимвольно и возвращает длину.
Первоначальные наблюдения:
Похоже, что функция работает должным образом, возвращая правильную длину во время выполнения и генерируя ассемблерный код, который предполагает, что вычисления происходят во время компиляции. Возникает вопрос:
Гарантировано ли, что функция длины выполнится во время компиляции?
Перспектива стандарта:
Стандарт C не требует явного вычисления константных выражений во время компиляции. Однако ненормативное примечание предполагает такую возможность.
Обеспечение выполнения во время компиляции:
Чтобы обеспечить оценку во время компиляции, функцию можно присвоить constexpr переменная. Согласно рекомендациям C 11, маркировка переменной constexpr требует ее оценки во время компиляции. оценка во время компиляции как:
Требование к постоянному выражению:
При использовании в местах, где требуются постоянные выражения (например, границы массива, метки регистра).Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3