2015-09-27 5 views
0

В C++, насколько я знаю, я считаю, что std::string не может представлять отсутствие значения. Следовательно, в случае способа, возвращающего указатель на std::string, например std::string *myMethod(). Имеет ли смысл проверять, является ли возвращаемое значение из myMethod NULL?проверить значение NULL указателя строки std:

Вариант использования, связанный с моим вопросом, следующий: метод std :: string *() был автоматически создан библиотекой-заглушкой gsoap из файла WSDL. У меня нет доступа к файлу WSDL, поэтому я не могу изменить подпись метода. Мое приложение C++ - это клиент, а сервер - это Java-приложение. Оба этих приложения взаимодействуют через веб-службы

+2

Да, поскольку 'std :: string *' является указателем на строку, а не 'std :: string'; указатели могут быть «nullptr». –

+0

Попробуйте nullptr Если функция возвращает указатель, тогда может потребоваться тест –

+3

Есть ли необходимость в различии между отсутствием строки и пустой строкой? Каков ваш прецедент? –

ответ

1

Да, это имеет смысл.

Тип возврата - это указатель типа string..pointers содержат адреса, и возможно, что он может быть нулевым.

В этом случае возврат указателя и нулевой проверки - это правильный путь.

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

Is the practice of returning a C++ reference variable, evil?

+1

Где упоминается ссылка –

+0

«Если вы не хотите проверять нулевое значение» .... это альтернатива, если он уверен, что такой вариант использования с его текущей подписью не будет. . – basav

+0

как вы решаете, вернете ли ссылку или вернете указатель и какие компромиссы? эта ссылка дает понять. – basav

0

Если функция возвращает std::string*, вы можете проверить, если он возвращает NULL (или лучше, nullptr), потому что вы не проверить саму строку, но указатель на строку.

1

Да, это имеет смысл. Соответствующая часть скрыта в комментарии: «метод() был автоматически создан ... из файла WSDL». В текстовых протоколах, таких как WDSL, которые следуют шаблону «ключ-значение», отсутствие ключа синтаксически отличается от пустого ключа key="". Общая библиотека не может предположить, что эти два семантически эквивалентны. Таким образом, он будет использовать return nullptr, чтобы сигнализировать об отсутствии ключа.

 Смежные вопросы

  • Нет связанных вопросов^_^