Вычисление длины строки C во время компиляции. Это действительно constexpr?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Вычисление длины строки C во время компиляции. Это действительно constexpr?

Сообщение Anonymous »

Я пытаюсь вычислить длину строкового литерала во время компиляции. Для этого я использую следующий код:

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

#include 

int constexpr length(const char* str)
{
return *str ? 1 + length(str + 1) : 0;
}

int main()
{
printf("%d %d", length("abcd"), length("abcdefgh"));
}
Все работает как положено, программа печатает 4 и 8. Ассемблерный код, сгенерированный clang, показывает, что результаты вычисляются во время компиляции:

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

0x100000f5e:  leaq   0x35(%rip), %rdi          ; "%d %d"
0x100000f65:  movl   $0x4, %esi
0x100000f6a:  movl   $0x8, %edx
0x100000f6f:  xorl   %eax, %eax
0x100000f71:  callq  0x100000f7a               ; symbol stub for: printf
Мой вопрос: гарантируется ли стандартом, что функция length будет оцениваться во время компиляции?

Если это правда, то дверь для вычислений строковых литералов во время компиляции только что открылась для меня... например, я могу вычислять хэши во время компиляции и многое другое...

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

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

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

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

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

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