Hvad er formålet med std::to_integer?

Hvad er formålet med std::to_integer?

Du siger det, som om det er en triviel detalje.

Afstøbninger er farlige. Det er nemt at caste noget til den forkerte type, og ofte vil kompilatorer ikke forhindre dig i at gøre præcis det. Desuden fordi std::byte er ikke en integral type i C++, at arbejde med numeriske byteværdier kræver ofte en mængde casting. At have en funktion, der eksplicit konverterer til heltal, giver en sikrere brugeroplevelse.

For eksempel float(some_byte) er helt lovligt, mens to_integer<float>(some_byte) er udtrykkeligt forbudt. to_integer<T> kræver, at T er en integral type.

to_integer er en sikrere alternativ.

Hvis du med "hel overskrift" mener den samme overskrift du har std::byte fra og er derfor allerede per definition inkluderet...


std::to_integer<T>(some_byte) svarer til T(some_byte) hvis den faktisk kompilerer . T(some_byte) svarer til den usikre C-stil rollebesætning på (T)some_byte , som kan gøre skræmmende ting. På den anden side, std::to_integer er passende begrænset til kun at virke, når det er sikkert:

Hvis T var faktisk ikke en heltalstype, snarere end potentielt at have udefineret adfærd, kompilerer koden ikke. Hvis some_byte var faktisk ikke en std::byte , i stedet for potentielt at have udefineret adfærd, vil koden ikke kompilere.


Ud over det allerede nævnte hensigts- og sikkerhedsspørgsmål, får jeg ideen fra udvalgets diskussion på papiret, at det er beregnet til at være som std::to_string og kan have flere overbelastninger i fremtiden.