在问候时,临时对象被摧毁,这是有效的:使用字符串::临时串c_str的
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
这表明整个语句先进行计算,然后所有的临时被破坏。此订购是由标准还是特定于实施的?