Il seguente codice:Come utilizzare un cast esplicito per sopprimere questo avviso?
#include <cstdint>
#include <vector>
#include <boost/range/irange.hpp>
int main() {
int64_t first = 0, last = 10;
std::vector<double> result = boost::copy_range<std::vector<double>>(boost::irange(first, last));
}
genera l'avviso (e oltre 100 linee di analisi dello stack delle chiamate basato su modelli):
1>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xmemory0(600):
warning C4244: 'initializing' : conversion from 'unsigned __int64' to 'double', possible loss of data
voglio dire al compilatore che non mi interessa che la mia int64_t
sono convertiti in double
. Invece non voglio usare un int a 32 bit. Di solito userei static_cast<double>(my64BitInt)
per risolvere questo problema, ma non funzionerà per un intervallo. In questo momento sto ricorrendo alla direttiva del compilatore per sopprimere l'avvertimento, ma non è l'ideale.
Modifica: ecco uno pastebin con l'output del compilatore completo.
1) È possibile eliminare gli avvisi nelle impostazioni di progetto piuttosto che con pragma, se si pensa che non avrete mai preoccupate per questo. 2) Perché 'first' e' last' sono dichiarati come 'int64_t' invece di' double'? – celticminstrel
La direttiva @celticminstrel in Visual Studio consente di sopprimere gli avvisi su determinate righe di codice e di lasciarli sul posto per il resto del progetto. – IronMensan
Sono consapevole. (Puoi farlo anche con clang/gcc, anche se la sintassi è un po 'diversa.) Lo stavo solo sottolineando in parte perché personalmente trovo che quel particolare avvertimento sia inutile più spesso che utile e in parte nel caso in cui tu sia d'accordo. – celticminstrel