Если вы используете char[]
, тогда вы можете использовать sizeof(str) - 1
. Примечание: std::strlen(str)
, скорее всего, будет оптимизирован. Например, используя GCC 4.9.2 с -O2
, следующие коды:
std::cout << sizeof("hello") - 1;
std::cout << std::strlen("hello");
результат в этой сборке:
[...]
movl $5, %esi
[...]
Вы должны использовать std::string
в любом случае.std::string::size
и std::string::length
оба имеют постоянную сложность, так как она может быть реализована как это (libstdC++):
size_type
size() const _GLIBCXX_NOEXCEPT
{ return _M_rep()->_M_length; }
Как и другие предложили, вы можете сохранить длину в переменной и свести к минимуму вызовы std::strlen
. В общем, это пахнет как случай преждевременной оптимизации. Стандартная библиотека C++ - лучший выбор.
'std :: string :: size()' –
Вы не использовали бы массив символов .... и ваш пример не работает для определения размера строки C. Почему вы используете 'char []' для строк в C++? –
Проблема не в функции (которая реализована так эффективно, как может быть), а в стиле кодирования, что делает его частое использование необходимым. Как отмечали другие, помните длину строки. В C++ используйте 'std :: string'. (Вы должны использовать его и по другим причинам.) – 5gon12eder