Portál AbcLinuxu, 22. prosince 2025 09:27
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.