Linia ta kompiluje kiedy używać C++, ale nie C:Kompiluje jak C++, ale nie C (błąd: lwartość wymagane jednoargumentowego '&' argumentu)
gmtime(&(*(time_t *)alloca(sizeof(time_t)) = time(NULL))); //make an lvalue with alloca
Jestem zaskoczony tej różnicy. Nie ma nawet ostrzeżenia dla C++.
Kiedy określić gcc -x c
komunikat brzmi:
playground.cpp:25:8: error: lvalue required as unary '&' operand
gmtime(&(*(time_t *)alloca(sizeof(time_t)) = time(NULL)));
^
nie jest &
tutaj tylko adresu wykonawcy? Dlaczego jest inaczej w C i C++?
Chociaż mogę używać literałów złożonych w języku C, czy nadal można zmodyfikować moją składnię, aby działała zarówno w C & C++?
Również różnica nie chodzi o '&' wydaje się być o tym, czy '(* (time_t *) alloca (sizeof (time_t)) = czas (null)) 'jest lwartością lub nie. – immibis
Ponadto, dlaczego nie pisać tego w dwóch liniach? 'time_t t = time (NULL); gmtime (&t); ' – immibis
@imibi głównie dlatego, że chcę uzyskać adres tymczasowego obiektu (wartość' time_t' jest używana tylko raz) .Znalazłem złożone literały w C tak wygodne, ale nie mogę go używać w C++. – cshu