一時オブジェクトがいつ破棄されるかに関して、これは有効ですか:
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
これは、ステートメント全体が最初に評価され、次にすべての一時ステートメントが破棄されることを示します。この順序付けは標準または実装固有で義務付けられていますか?