我应该在这里使用什么类型的演员?

时间:2015-04-21 08:58:48

标签: c++

我有这段代码:

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 ++样式转换?

3 个答案:

答案 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();