Portál AbcLinuxu, 4. listopadu 2025 12:26
int giveMeAnInt(); double giveMeADouble(); double a = giveMeADouble(); - double b = giveMeAnInt(); - double c = a / b; + int b = giveMeAnInt(); + double c = a / static_cast<double>(b);Může mi někdo vysvětlit přínos takové změny? Za sebe musím říct, že se mi změna nezdá a na jakýchsi (neznámých) platformách, kde double nemůže reprezentovat všechny hodnoty intu, nový kód pravděpodobněji skryje problém / potlačí varování kompilátoru o možné ztrátě přesnosti.
constexpr a u runtime ztráty přesnosti kompilátor nevaruje (nemá jak).
            
#include <iostream>
int main()
{
    long a;
    long b;
    
    std::cin >> a >> b;
    
    double ad = a;
    double bd = static_cast<double>(b);
    std::cout << ad << bd;
}
Zkompiluju g++ -Wconversion -o a a.cpp. Dostanu
a.cpp: In function ‘int main()’:
a.cpp:10:17: warning: conversion to ‘double’ from ‘long int’ may alter its value [-Wconversion]
     double ad = a;
                 ^
Static cast mi tedy potlačí varování na platformě, kde nelze provést konverzi pro všechny hodnoty zdrojového typu.
            
        Tiskni
            
                Sdílej:
                
                
                
                
                
                
            
    
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.