webForumDet fria alternativet

"static_cast" Vad används den till?

C/C++

2 svar · 719 visningar · startad av Danielkun

Medlem sedan maj 2003361 inlägg
Frågan#1

Ett exempel i C++ boken jag pluggar ifrån nu använder static_cast. Jag förstår dock inte riktigt syftet med den i koden nedan.

Jag testade utan, (med raden som är bort kommenterad) och det fungerade lika bra.

void GradeBook::determineClassAverage(){
     
     int total;
     int gradeCounter;
     int grade;
     double average;
     
     total = 0;
     gradeCounter = 0;
     
     cout << "Enter grade or -1 to quit: ";
     cin >> grade;
     
     while(grade != -1){
     
        total = total + grade;
        gradeCounter = gradeCounter + 1;
        
        cout << "Enter grade or -1 to quit: ";
        cin >> grade;
     }
     
     if(gradeCounter != 0){
     
         average = static_cast< double >(total) / gradeCounter;
//       average = total / gradeCounter;
         
         
         cout << "\nTotal of " << gradeCounter << " grades is: " << total;
         cout << "\nAverage is: " << fixed << setprecision(2) << average << endl;
     
     }
     else
         cout << "\nNo grades were entered";
}

Nån som kan förklara varför dom har med static_cast i exemplet?

Medlem sedan mars 2007845 inlägg
#2

static_cast används för att konvertera mellan olika variabletyper. I ditt exempel dividerar du int med int och stoppar svaret i en double. Då är det rätt att använda static_cast. Det kan funka utan, beroende på hur gnällig din kompilator är inställd på att vara. Men det är inte alltid svaret blir rätt om du inte berättar att du ändrar variabeltyp.

/D

Medlem sedan maj 2003361 inlägg
#3

Tack!

251 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)