Μετάβαση στο περιεχόμενο
Topos Uranos

Περίληψη

Ένας τύπος δεν ορίζει μόνο πόσα byte πιάνει ένα δεδομένο, αλλά και πώς διαβάζονται τα bit του: το ίδιο byte είναι το γράμμα «A» για ένα char και ο αριθμός 65 για ένα int. Αυτό το μάθημα συμπληρώνει τους βασικούς τύπους με τους χαρακτήρες και τις λογικές τιμές, και μελετά το πέρασμα από έναν τύπο σε άλλον: τις έμμεσες μετατροπές, που ο μεταγλωττιστής κάνει χωρίς να του ζητηθούν και που μπορεί να χάνουν πληροφορία· τη ρητή μετατροπή με static_cast· και την αρχικοποίηση με άγκιστρα, που απορρίπτει τις απώλειες. Κλείνει με τις σταθερές, const και constexpr, που μετατρέπουν μια πρόθεση («αυτή η τιμή δεν αλλάζει») σε εγγύηση την οποία ελέγχει ο μεταγλωττιστής, και με τα literal και το auto, που καθορίζουν τον τύπο μιας τιμής γραμμένης στον πηγαίο κώδικα.

Μαθησιακοί στόχοι

  1. Να χρησιμοποιείτε τον αριθμητικό κωδικό ενός χαρακτήρα για να υπολογίζετε με αυτόν, για παράδειγμα για να βρίσκετε την τιμή ενός ψηφίου που διαβάστηκε ως χαρακτήρας.
  2. Να προβλέπετε το αποτέλεσμα μιας έμμεσης μετατροπής ανάμεσα σε ακέραιους, πραγματικούς και λογικές τιμές, και να γράφετε τη ρητή μετατροπή με static_cast.
  3. Να εξηγείτε γιατί η αρχικοποίηση με άγκιστρα απορρίπτει τις μετατροπές που χάνουν πληροφορία, και τι κάνει ο GCC σε κάθε περίπτωση.
  4. Να δηλώνετε με const ή constexpr κάθε τιμή που δεν πρέπει να αλλάξει, και να διακρίνετε τη μία λέξη από την άλλη.
  5. Να συνάγετε τον τύπο ενός literal (5, 5u, 5.0, 5.0f, '5', "5") και αυτόν που του αποδίδει το auto.

Ο τύπος ως ερμηνεία

Το μάθημα Μεταβλητές και μνήμη παρουσίασε τη μεταβλητή ως ένα κελί μνήμης με όνομα, τύπο και τιμή, και τα μαθήματα Οι ακέραιοι και η αναπαράστασή τους και Οι αριθμοί κινητής υποδιαστολής έδειξαν ότι μέσα στο κελί δεν υπάρχουν αριθμοί αλλά bit, και ότι ο τύπος λέει πώς διαβάζονται. Αυτό το μάθημα οδηγεί την ιδέα στη συνέπειά της: αν ο τύπος είναι ο κανόνας ανάγνωσης, τότε τα ίδια bit σημαίνουν διαφορετικά πράγματα ανάλογα με τον τύπο με τον οποίο διαβάζονται, και το πέρασμα μιας τιμής από έναν τύπο σε άλλον, που στη C++ λέγεται μετατροπή, είναι αλλαγή κανόνα. Ορισμένες μετατροπές διατηρούν την τιμή (ο ακέραιος 7 μετατρέπεται στον πραγματικό 7.0 χωρίς να χαθεί τίποτα)· άλλες την αλλοιώνουν (ο πραγματικός 2.7 μετατρέπεται στον ακέραιο 2). Από αυτό προκύπτει το ερώτημα που διατρέχει το μάθημα: σε κάθε μετατροπή, διατηρείται η τιμή, και ποιος το ελέγχει;