#c
#c
Вопрос:
Этот фрагмент кода в порядке или это приводит к неопределенному поведению?
std::string s;
assert(strlen(s.c_str())==0);
Если это не неопределенное поведение, пройдет ли приведенное выше утверждение?
Ответ №1:
Это совершенно точно определено, и утверждение выполняется. Функция c_str() всегда будет возвращать допустимую строку C, заканчивающуюся нулем.
Обычно для проверки наличия пустой строки используется функция empty().
Ответ №2:
Да, это сработает (если вы добавите ()
к c_str
, чтобы заставить его фактически вызывать функцию), и утверждение пройдет.
Ответ №3:
Это ошибка компиляции (если у вас включены утверждения), поскольку const char *(std::string::*)()
, не может быть преобразовано в const char *
неявно.
(Язык только наполовину заострен.)