C++ 什么是std::安全字符串?

C++ 什么是std::安全字符串?,c++,string,C++,String,a包含以下代码行: label = std::safe_string(name); // label is a std::string 其意图似乎是一个围绕字符串文字的包装器(因此可能不会发生分配)。我从来没有听说过safe\u string,显然也没有听说过(我在98标准中也找不到) 有人知道这是怎么回事吗?没有标准的安全字符串。你在回答者的回答中看到的安全字符串来自一个看起来像私有STL扩展实用程序库的东西 你会在另一个论坛的帖子中看到同一个库。搜索后(我应该先想到这个…),我发现了这个:

a包含以下代码行:

label = std::safe_string(name); // label is a std::string
其意图似乎是一个围绕字符串文字的包装器(因此可能不会发生分配)。我从来没有听说过
safe\u string
,显然也没有听说过(我在98标准中也找不到)


有人知道这是怎么回事吗?

没有标准的安全字符串。你在回答者的回答中看到的安全字符串来自一个看起来像私有STL扩展实用程序库的东西

你会在另一个论坛的帖子中看到同一个库。

搜索后(我应该先想到这个…),我发现了这个:

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

它将
NULL
s转换为零长度字符串。虽然这不是标准的,但它可能是在特定STL实现中的某种扩展,在回答中提到了。

< P>它不是C++标准的一部分(但应该是)

我一直在使用同一种helper函数来避免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提供一个可能为NULL的char*字符串时,它没有开销,也不会崩溃,但在特定情况下,它应该表现为空字符串。

使用“”创建一个1字节的文本对象。如果编译器不是智能的,那么每个编译器都是不同的,因此可能会导致代码膨胀。我怀疑编译器足够聪明,可以优化它,因此这是一个错误的增益,并使代码复杂化。我对返回指向本地对象的指针或引用的想法感到不舒服,即使编译器可以正确处理每种情况(并使“”在返回后幸存).actuall函数返回一个std::string,因此返回指针没有问题,反正字符串文本存储在程序的数据段中,因此从函数返回指向文本的指针是定义良好的。在这种情况下,您是对的。我的示例是更大的示例的一部分:空字符串在其他地方被重用,其他全局常量对象也是如此(我为这些全局常量变量提供了global.hpp和global.cpp源)。搜索结果不包括“safe_string”。