C++ 在临时字符串上使用string::c_str
关于临时对象何时被销毁,这是否有效:C++ 在临时字符串上使用string::c_str,c++,destructor,temporary-objects,C++,Destructor,Temporary Objects,关于临时对象何时被销毁,这是否有效: FILE *f = fopen (std::string ("my_path").c_str (), "r"); 在对fopen的第一个参数求值后或在调用fopen后,是否立即销毁临时文件 使用以下代码进行测试: #include <cstdio> using namespace std; struct A { ~A() { printf ("~A\n"); } const char *c_str () { re
FILE *f = fopen (std::string ("my_path").c_str (), "r");
在对fopen
的第一个参数求值后或在调用fopen
后,是否立即销毁临时文件
使用以下代码进行测试:
#include <cstdio>
using namespace std;
struct A {
~A() { printf ("~A\n"); }
const char *c_str () { return "c_str"; }
};
void foo (const char *s) { printf ("%s\n", s); }
int main () {
foo (A().c_str());
printf ("after\n");
return 0;
}
这表示首先计算整个语句,然后销毁所有临时语句。这种排序是由标准规定的还是特定于实现的?临时命令将在表达式末尾销毁,即
代码>分号这样你就安全了。
§12.2。。。临时对象将作为中的最后一步被销毁
计算(词汇上)包含
创建它们的位置。这是真实的,即使评估
以抛出异常结束
这种订购是由标准规定的还是特定于实现的
[课堂临时]/3
临时对象作为最后一步被销毁
在计算完整表达式(1.9)时,该表达式(在词汇上)包含创建它们的点
因此,它是由标准规定的
c_str
~A
after