Σε C + +, ποια είναι η διαφορά μεταξύ "χρησιμοποιώντας ll = long long" και "typedef long long ll";


Απάντηση 1:

Το πρώτο είναι ένα ψευδώνυμο τύπου και το δεύτερο είναι ένας ορισμός τύπου.

Ένα ψευδώνυμο τύπου υποκαθιστά απλώς τον τύπο στη συλλογή πηγής.

Ένα typedef εισάγει τον τύπο στο λεξικό γνωστών τύπων.

Ένα typedef μπορεί να δημιουργήσει τύπους, ενώ η ρήτρα χρήσης δημιουργεί ένα ψευδώνυμο για έναν ήδη γνωστό τύπο.

Στο παράδειγμά σας, είναι μια διάκριση χωρίς διαφορά, αλλά μπορεί να μην μεταφράζεται εύκολα για συσχετισμένους τύπους όπως δείκτες, αναφορές κλπ.

Θα ήθελα να σας συμβουλεύω να μην χρησιμοποιήσετε ένα τέτοιο ψευδώνυμο ή typedef επειδή είναι πολύ μη ενημερωτικό και υπάρχουν πολλά αποδεκτά ήδη γύρω από εναλλακτικές λύσεις όπως

int64_t
uint32_t

[| u] intN_t

απανθρακώνω

int

φλοτέρ

θα έχετε αυτές και όλες τις σταθερές MAX και MIN συμπεριλαμβάνοντας cstdint.

#include 

(stdint.h)


Απάντηση 2:

Δεν υπάρχει καμιά διαφορά στο νόημα. Το πρότυπο ([dcl.typedef]) λέει:

Ένα typedef-όνομα μπορεί επίσης να εισαχθεί με ψευδείς δηλώσεις. Το αναγνωριστικό που ακολουθεί τη χρησιμοποιούμενη λέξη-κλειδί γίνεται typedef-όνομα και ο προαιρετικός προσδιοριστής χαρακτηριστικών-ακολουθία ακολουθώντας τον αναγνωριστικό που αντιστοιχεί στο όνομα του typedef. Έχει την ίδια σημασιολογία σαν να εισήχθη από τον προσδιοριστή typedef.

Η δήλωση χρησιμοποιώντας ll = long long? είναι μια ψευδής δήλωση.