11

警告:

warning C4244: 'initializing' : conversion from 'std::streamoff' to 'unsigned int', possible loss of data

のせいで:

unsigned int FileSize = File.tellg( ); // WARNING
std::cout << "Size = " << FileSize << std::endl;

考えられる解決策は?これを行っても大丈夫ですか:

// No more warnings but, is it safe?
unsigned int FileSize = (unsigned int)File.tellg( ); // OK?
std::cout << "Size = " << FileSize << std::endl;

これはどう?

// No more warnings but, is it safe?
unsigned int FileSize = static_cast< unsigned int >( File.tellg( ) );
4

1 に答える 1

15

streamoffC++ 標準ライブラリの実装によって定義された符号付き整数型であり、可能な限り最大のファイル サイズに対応するのに十分な大きさです。たとえば、私の x86_64 stdlibc++ では、int64_t.

データ損失の可能性を回避するには、より大きな型を使用するか、単に変数を型にしstreamoffます。

于 2013-03-02T08:19:00.277 に答える