关于临时对象何时被销毁,这是否有效:
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;
}
给出:
c_str
~A
after
这表明首先评估整个语句,然后销毁任何临时对象。这种排序是标准规定的还是特定于实施的?