Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在临时字符串上使用string::c_str_C++_Destructor_Temporary Objects - Fatal编程技术网

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