#c #string #string-length #size-t
Вопрос:
Как правильно использовать str.length() в cpp?
string s = "Hello";
int length = s.length();
или
string s = "Hello";
unsigned int length = s.length();
или
string s = "Hello";
unsigned int length = static_cast<unsigned int>(s.length());
Комментарии:
1.
auto length = s.length();
? Вы упоминаетеsize_t
в названии, но ни в одном из ваших примеров это не используется, почему?2. Каким-то образом, даже несмотря на то, что это упоминается в вашем названии, ни один из ваших вариантов на самом деле не используется
size_t
.3.
std::size_t length = s.length();
. Или еще лучше,std::size_t size = s.size();
для согласованности с другими контейнерами.4. Зависит от того, что вы с этим делаете и какие предположения хотите сделать. Знаете ли вы, что размер всегда будет соответствовать
int
операционнойunsigned
? Вы собираетесь выполнять какую-то арифметику со знаком или сравнивать с ней?5.
auto length = s.length();
илиsize_t length = s.length();
это то, что я предпочитаю , но если у вас нет строки длиной, превышающей максимальное значениеint
, все эти предупреждения в порядке.
Ответ №1:
Чтобы быть педантичным, я бы рекомендовал вам использовать std::string::size_type
. Таким образом, вы не сможете ошибиться:
std::string s = "Hello";
std::string::size_type length = s.length();
Вы можете присвоить ему псевдоним более короткого типа для краткости, если хотите:
using str_size = std::string::size_type;
std::string s = "Hello";
str_size length = s.length();
Конечно, вы часто можете позволить компилятору определить правильный тип для вас с помощью auto
:
std::string s = "Hello";
auto length = s.length();
Ответ №2:
В c
std::string
классе есть .size()
метод , который возвращает значение типа size_t
(во всяком случае, по умолчанию. Для лучшего понимания того, почему этот тип .size()
возвращается по умолчанию, см. Комментарий @bitmask ниже), который используется для представления размеров (как следует из его названия). Поэтому, учитывая это, ваш код должен выглядеть примерно так
std::string s("hello world!");
size_t string_length = s.size();
Комментарии:
1. Технически,
std::string::size()
возвращает asize_type
, который имеет псевдоним для своего распределителяsize_type
, который, в свою очередь, для Распределителя по умолчаниюstd::string
, а именноstd::allocator
, тогдаstd::size_t
.2. @bitmask благодарим вас за разработку. Я сошлюсь на ваш комментарий в своем ответе