2016-12-25 6 views
-3

Le code ici est utilisé pour créer un projet de carte de rapport d'étudiant mais en essayant de comprendre nous ne pouvons pas comprendre l'utilisation et les fonctions des lignes ci-dessous du code.Qu'entend-on par les lignes surlignées dans le programme ci-dessous?

Ce:

File.read(reinterpret_cast<char *> (&st), sizeof(student));

et ceci:

int pos=(-1)*static_cast<int>(sizeof(st));

Voici le code principal:

File.read(reinterpret_cast<char *> (&st), sizeof(student)); 
if(st.retrollno()==n) 
    { 
    st.showdata(); 
    cout<<"\n\nPlease Enter The New Details of student"<<endl; 
     st.getdata(); 
      int pos=(-1)*static_cast<int>(sizeof(st)); 
      File.seekp(pos,ios::cur); 
      File.write(reinterpret_cast<char *> (&st), sizeof(student)); 
      cout<<"\n\n\t Record Updated"; 
      found=true; 
    } 
+1

Possible duplication de [En C++, pourquoi utiliser static \ _cast (x) au lieu de (int) x?] (Http://stackoverflow.com/questions/103512/in-c-why-use-static- castintx-au lieu-de-intx) –

+2

Connaissez-vous ['reinterpret_cast'] (http://en.cppreference.com/w/cpp/language/reinterpret_cast) et [' static_cast'] (http: // en. cppreference.com/w/cpp/language/static_cast) et ce qu'ils font? Savez-vous quels arguments ['std :: istream :: read'] (http://en.cppreference.com/w/cpp/io/basic_istream/read) accepte? Savez-vous ce que fait [sizeof] (http://fr.cppreference.com/w/cpp/language/sizeof)? Alors vous savez tout ce que vous devez savoir. –

+3

Copie possible de [Que réinterprète \ _cast (& st) et (-1) \ * static \ _cast signifie?] (Http://stackoverflow.com/questions/41319180/what-does-reinterpret-castchar-st -et-1static-castint-mean) – Danh

Répondre

1
int pos=(-1)*static_cast<int>(sizeof(st)); 

convertit le type unsigned int en entier et nie, afin de calculer le décalage pour chercher en arrière dans la ligne suivante

reinterpret_cast<char *> (&st) 

convertit simplement le pointeur sur la structure à un pointeur sur char il est donc compatible avec la fonction prototype. Mais la même valeur de pointeur est transmise à la fonction.

Donc, ce code rembobine sizeof(st) octets du fichier et écrit la nouvelle structure, en mettant à jour l'ancien.

+1

L'appel d'un overkill 'static_cast' et de la recommandation d'un C-cast est plutôt à l'envers ... – Quentin

+0

à droite, en théorie. Mais beaucoup de programmes C++ le font quand il n'y a pas de risque. Édité. –