Время компиляции “strlen ()” эффективно?

Это будет работать превосходное, так же, как возвращающийся посреди try{}finally{}

12
задан Alexander Malakhov 27 July 2018 в 10:35
поделиться

4 ответа

Возможность встроить вызов функции - это как оптимизация для конкретного компилятора , так и обычное поведение . То есть многие компиляторы могут это делать, но они не обязаны это делать.

5
ответ дан 2 December 2019 в 21:23
поделиться

Почему бы и нет

sizeof "[]" - 1;

(минус один для конечного нуля. Вы можете сделать sizeof "[]" - sizeof '\ 0', но sizeof '\ 0' в C часто бывает sizeof (int), а "- 1" отлично читается.)

12
ответ дан 2 December 2019 в 21:23
поделиться
#define TWO 2
#define STRING_LENGTH 2
/* ... etc ... */

Серьезно, зачем проходить все эти хлопоты только для того, чтобы не набрать 2? Я искренне думаю, что вы делаете свой код менее читабельным, и другие программисты будут пялиться на вас, как будто вы нюхаете использованный кофе из фильтра.

-7
ответ дан 2 December 2019 в 21:23
поделиться

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

Я бы предпочел ваши шаблонные функции, поскольку они гарантированно не будут вызывать strlen во время выполнения. Конечно, вместо того, чтобы писать отдельные функции для char и wchar_t , вы можете добавить еще один аргумент шаблона и получить функцию, которая работает для любого типа:

template <typename Char_t, int len>
int static_strlen(const Char_t (&)[N] array){
  return len / sizeof(Char_t) - 1;
}

(как уже упоминалось в комментарии, это даст забавные результаты, если будет передан массив целых чисел, но вы, вероятно, сделаете это? В конце концов, он предназначен для строк)

И последнее замечание, имя _strlen - плохо . Все имена в области пространства имен, начинающиеся с подчеркивания, зарезервированы для реализации. Вы рискуете столкнуться с неприятными конфликтами имен.

Кстати, почему магическая константа «[]» меньше, чем 2?

В обоих случаях это литерал, который должен быть изменен, если формат строка сравнивается с изменениями.

3
ответ дан 2 December 2019 в 21:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: