是对以下C++代码合式:的std :: string :: c_str()和临时
void consumer(char const* p)
{
std::printf("%s", p);
}
std::string random_string_generator()
{
// returns a random std::string object
}
consumer(random_string_generator().c_str());
我与它的问题是,创建临时的std :: string对象和服用后c_str()指针,什么都不能阻止std :: string对象被破坏(或者我错了?)。你能指点我的标准吗,如果代码是好的,尽管一切。它工作,当我用g ++测试时。
您能否提供关于C++ 03或C++ 11标准的提示? – user1095108 2012-04-04 07:53:01
临时的生命周期在§12.2中定义。 (第12部分是 ,标题为“特殊成员函数”,它不是 期望寻找临时对象的生命期的地方,但这就是它的位置。) – 2012-04-04 07:56:24
@ user1095108函数参数的生命周期可以从§ 3.2.2和§3.7.2在C++ 03标准中。 – juanchopanza 2012-04-04 08:24:46