Πότε να χρησιμοποιήσετε το ανυπόγραφο τιμές πάνω από υπέγραψαν αυτά;

ψήφοι
66

Πότε είναι κατάλληλη για να χρησιμοποιήσετε ένα ανυπόγραφο μεταβλητής πάνω από ένα υπογεγραμμένο ένα; Τι γίνεται σε ένα forβρόχο;

Ακούω πολλές απόψεις για το θέμα αυτό και θα ήθελα να δω αν υπήρχε κάτι που μοιάζει με συναίνεση.

for (unsigned int i = 0; i < someThing.length(); i++) {  
    SomeThing var = someThing.at(i);  
    // You get the idea.  
}

Ξέρω Java δεν έχει ανυπόγραφο τιμές, και ότι πρέπει να ήταν μια συνειδητή απόφαση για Sun Microsystems μέρος ».

Δημοσιεύθηκε 02/08/2008 στις 04:34
πηγή χρήστη
Σε άλλες γλώσσες...                            


5 απαντήσεις

ψήφοι
61

Ήμουν στην ευχάριστη θέση να βρουν μια καλή συζήτηση για το θέμα αυτό, όπως δεν είχα πραγματικά δοθεί πολλή σκέψη πριν.

Εν ολίγοις, η οποία υπεγράφη είναι μια καλή γενική επιλογή - ακόμα και όταν είστε νεκροί βέβαιοι ότι όλοι οι αριθμοί είναι θετικές - αν πρόκειται να κάνετε αριθμητικές πράξεις με τη μεταβλητή (όπως σε ένα τυπικό για την περίπτωση loop).

Αν πρόκειται να κάνετε bitwise πράγματα όπως μάσκες, ανυπόγραφο αρχίζει να κάνει περισσότερο νόημα. Ή, αν είστε απελπισμένοι για να πάρει αυτό το επιπλέον θετικό σειρά με την αξιοποίηση της λίγο σημάδι.

Προσωπικά, μου αρέσει να υπογραφεί γιατί δεν εμπιστεύομαι τον εαυτό μου να μείνει συνεπής και να αποφευχθεί η ανάμειξη των δύο τύπων (όπως το άρθρο προειδοποιεί).

Απαντήθηκε 02/08/2008 στις 04:49
πηγή χρήστη

ψήφοι
8

Στο παράδειγμά σας παραπάνω, όταν «εγώ» θα είναι πάντα θετική και μεγαλύτερη ποικιλία θα είναι επωφελής, ανυπόγραφο θα ήταν χρήσιμη. Όπως και αν χρησιμοποιείτε δηλώσεις «δηλώνουν», όπως:

#declare BIT1 (unsigned int 1)
#declare BIT32 (unsigned int reallybignumber)

Ειδικά όταν αυτές οι τιμές δεν θα αλλάξει ποτέ.

Ωστόσο, αν κάνετε ένα λογιστικό πρόγραμμα, όπου οι άνθρωποι είναι ανεύθυνοι με τα χρήματά τους και να είναι συνεχώς στο κόκκινο, θα θέλετε σίγουρα να χρησιμοποιήσει «υπέγραψε».

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

Απαντήθηκε 02/08/2008 στις 05:31
πηγή χρήστη

ψήφοι
7

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

Με αυτό κατά νου, εγώ μόλις πρόσφατα έμαθε για ανυπόγραφα ακέραιοι, ενώ εργάζονται σε ένα επεξεργασία των δεδομένων του έργου σε ένα δυαδικό αρχείο και αποθήκευση των δεδομένων σε μια βάση δεδομένων. Ήμουν σκόπιμα «διαφθείρει» η δυαδικά δεδομένα, και κατέληξε να πάρει αρνητικές τιμές αντί για την αναμενόμενη σφάλμα. Βρήκα ότι ακόμα και αν η τιμή μετατραπεί, η τιμή δεν ίσχυε για την περίπτωση επιχείρησή μου.
Το πρόγραμμά μου δεν λάθη, και κατέληξα να πάρει λάθος δεδομένα στη βάση δεδομένων. Θα ήταν καλύτερα αν είχα χρησιμοποιήσει uintκαι είχε το πρόγραμμα αποτύχει.

Απαντήθηκε 10/11/2008 στις 20:04
πηγή χρήστη

ψήφοι
7

C και C ++ μεταγλωττιστές θα δημιουργήσει μια προειδοποίηση όταν συγκρίνετε υπογραφεί και ανυπόγραφο τύπων? στο παράδειγμα κώδικα σας, δεν θα μπορούσατε να κάνετε μεταβλητή βρόχου σας ανυπόγραφο και να έχουν τον compiler δημιουργία κώδικα χωρίς προειδοποιήσεις (υποθέτοντας ότι το εν λόγω προειδοποιήσεις ενεργοποιημένη).

Φυσικά, είστε κατάρτιση με προειδοποιήσεις γύρισε όλη τη διαδρομή μέχρι, έτσι δεν είναι;

Και, έχετε σκεφτεί τη σύνταξη με «τη θεραπεία προειδοποιήσεις όπως σφάλματα» για να θεωρήσει ότι ένα βήμα παραπέρα;

Το μειονέκτημα με τη χρήση υπέγραψαν οι αριθμοί είναι ότι υπάρχει ο πειρασμός να τα υπερφόρτωση, έτσι ώστε, για παράδειγμα, οι τιμές 0-> n είναι η επιλογή του μενού, και -1 σημαίνει ότι τίποτα δεν επιλεγεί - και όχι τη δημιουργία μιας κατηγορίας που έχει δύο μεταβλητές, μία για δείχνουν αν έχει επιλεγεί κάτι και άλλο να αποθηκεύσετε ό, τι η επιλογή είναι. Προτού να το ξέρετε, έχετε τον έλεγχο για αρνητική σε όλη τη χώρα και ο compiler είναι διαμαρτύρονται για το πώς είστε που θέλουν να συγκρίνουν την επιλογή μενού σχέση με τον αριθμό των επιλογών μενού που έχετε - αλλά αυτό είναι επικίνδυνο επειδή είναι διαφορετικοί τύποι . Επομένως, μην το κάνετε αυτό.

Απαντήθηκε 04/08/2008 στις 14:35
πηγή χρήστη

ψήφοι
6

size_tείναι συχνά μια καλή επιλογή για αυτό, ή size_typeαν χρησιμοποιείτε μια τάξη STL.

Απαντήθηκε 02/08/2008 στις 06:51
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more