Portál AbcLinuxu, 12. května 2025 05:05
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.