我有这段代码:
m_file.seekg(0, std::ios_base::end);
int fileSize = (int)(m_file.tellg());
m_file.seekg(0, std::ios_base::beg);
m_fileContent.resize(fileSize);
m_file.read(m_fileContent.data(), fileSize);
这个想法是将二进制文件的内容读入一个向量。这段代码编译好并运行良好,但我不确定这行在c ++环境中是否正确?
int fileSize = (int)(m_file.tellg());
我使用的是正确的演员吗?它是一个c风格的演员而不是c ++演员。我试过这个演员,但它会产生编译器错误:
int fileSize = reinterpret_cast<int>(m_file.tellg());
但是我收到了这个错误:
'reinterpret_cast' : cannot convert from 'std::fpos<_Mbstatet>' to 'int'
将值类型相互转换的最佳方法是什么?我应该使用C样式转换还是C ++样式转换?
答案 0 :(得分:3)
你根本不想要演员,而是使用
size_t fileSize = file.tellg();
答案 1 :(得分:3)
你根本不应该使用auto
进行投射,而是(假设是C ++ 11),
即:
auto fileSize = m_file.tellg();
它将确保您不使用错误的类型并避免可能最终丢失信息的隐式转换(例如从较大类型转换为较小类型)。另外,您不必为实际类型而烦恼(打字可能很麻烦,而且您可能会出错)。
答案 2 :(得分:0)
在C++11
之前我认为正确的做法是:
std::fstream::pos_type fileSize = m_file.tellg();
如果你有C++11
,那么你可以这样做:
auto fileSize = m_file.tellg();