Is it Safe to Utilize std::string::c_str() on Temporary Strings?
In C , the use of std::string::c_str() on temporary strings has been a subject of concern. Consider the following code snippet:
void consumer(char const* p) { std::printf("%s", p); } std::string random_string_generator(); consumer(random_string_generator().c_str());
The concern arises because, upon calling std::string::c_str() on the temporary std::string object, the destruction of the string object appears imminent.
However, according to the C 11 standard, the pointer retrieved via std::string::c_str() references memory managed by the string object, and its validity extends until:
In the provided code snippet, the temporary string object is destroyed at the conclusion of the full expression (i.e., after the call to consumer()). Therefore, the code is considered safe, as the pointer retrieved via std::string::c_str() remains valid throughout the call to consumer().
The lifetime of temporary objects has been clearly defined since C 98, unlike in earlier versions of C where it varied depending on the compiler. As a result, code that was once unsafe in earlier versions is now considered safe with modern C compilers.
The above is the detailed content of Is it Safe to Use std::string::c_str() on Temporary Strings in C ?. For more information, please follow other related articles on the PHP Chinese website!