Что такое std :: safe_string? - PullRequest
       25

Что такое std :: safe_string?

7 голосов
/ 26 октября 2008

ответ на один из моих вопросов включал следующую строку кода:

label = std::safe_string(name); // label is a std::string

Намерение, по-видимому, является оберткой вокруг строкового литерала (поэтому, по-видимому, никакого выделения не происходит). Я никогда не слышал о safe_string и, по-видимому, ни один не имеет google (и при этом я не мог найти его в стандарте 98).

Кто-нибудь знает, о чем это?

Ответы [ 4 ]

8 голосов
/ 26 октября 2008

После поиска Поиск кода Google (я должен был подумать об этом первым ...) Я нашел это:

//tools-cgi.cpp
string safe_string (const char * s)
{
    return (s != NULL) ? s : "";
}

Что конвертирует NULL s в строки нулевой длины. Хотя это не стандартно, это, вероятно, какое-то расширение в конкретной реализации STL, о которой говорилось в ответе.

6 голосов
/ 26 октября 2008

Нет стандартной safe_string. Строка safe_string, которую вы видите в ответе этого ответчика, основана на том, что похоже на частную служебную библиотеку расширений STL.

Google для "stlext / stringext.h" , и вы увидите ту же библиотеку, на которую есть ссылки в сообщении на другом форуме.

4 голосов
/ 26 октября 2008

Нет такой вещи как std::safe_string

0 голосов
/ 26 октября 2008

Это не является частью стандарта C ++ (но, возможно, так и должно быть?)

Я использую вспомогательную функцию того же типа, чтобы избежать выдачи исключения std :: string со строкой NULL char *. Но это было что-то вроде:

// defined somewhere else as ""
extern const char * const g_strEmptyString ;

inline const char * safe_string(const char * p)
{
   return (p) ? (p) : (g_strEmptyString) ;
}

Никаких накладных расходов и сбоя std :: string, когда я передаю ей строку char *, которая может быть NULL, но в данном конкретном случае должна вести себя как пустая строка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...