以下代码是否符合标准,就 std::string
而言,是绝对安全的吗?
#include <string>
#include <cstdio>
int main()
{
std::string strCool = "My cool string!";
const char *pszCool = strCool.c_str();
strCool = pszCool;
printf( "Result: %s", strCool.c_str() );
}
我看到的声明表明c_str的结果只有在同一个std::string
上的另一个方法被调用之前是安全可用的,但是我不确定是否安全将该const char *
传回赋值方法。
在使用实际编译器(GCC、Clang和MSVC的最新版本)进行测试时,它们似乎都支持这种行为。
此外,编译器还支持将字符串的后缀赋值回本身,例如在此示例中strCool = pszCool + 3
;结果将是字符串具有与传入的相同的值。
这种行为是否有保证,或者我只是幸运地得到了我测试的编译器提供的标准库支持这种情况?
stl
的标签,但是看起来你正在使用 C++ 标准库。你使用的是哪个库?另请参阅 “STL” 和 “C++ 标准库” 有什么区别? 和stl
描述。 - Brian61354270如果std::string被销毁或者调用了字符串的非const成员函数,c_str()的结果将变得无效。因此,通常情况下,如果需要保留它,则需要复制它。
换句话说,a)确保原始的std::string保持不变,和/或b)使用strcpy()复制到另一个缓冲区。 - paulsm4