この行はC私はC++を使用するときにコンパイルではなく:がコンパイル
gmtime(&(*(time_t *)alloca(sizeof(time_t)) = time(NULL))); //make an lvalue with alloca
私はこの違いによって驚いて。 C++の警告さえありません。
私はgcc -x c
を指定すると、メッセージは次のとおりです。
playground.cpp:25:8: error: lvalue required as unary '&' operand
gmtime(&(*(time_t *)alloca(sizeof(time_t)) = time(NULL)));
^
はちょうどアドレス演算子ここ&
はありませんか? CとC++の違いは何ですか?
Cでコンパウンドリテラルを使用することはできますが、C & C++で動作するように構文を変更することは可能ですか?
また、違いは '&'についてではなく、 '(* time_t *)alloca(sizeof(time_t))= time )) 'は左辺値かどうかです。 – immibis
また、これを2行に書くのはなぜですか? 'time_t t = time(NULL); gmtime(&t); ' – immibis
@immibis主に一時オブジェクトのアドレスを取得したいので(' time_t'の値は一度だけ使用されます)、Cで複合リテラルが見つかりましたので便利ですが、C++では使用できません。 – cshu