在問候時,臨時對象被摧毀,這是有效的:使用字符串::臨時串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
這表明整個語句先進行計算,然後所有的臨時被破壞。此訂購是由標準還是特定於實施的?