繁体   English   中英

我应该在这里使用哪种类型的演员表?

[英]what type of cast should I use here?

我有以下代码:

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

我使用的演员正确吗? 它是ac样式转换,而不是c ++。 我尝试了这种强制转换,但它会生成编译器错误:

 int fileSize = reinterpret_cast<int>(m_file.tellg());

但我收到此错误:

'reinterpret_cast' : cannot convert from 'std::fpos<_Mbstatet>' to 'int'    

相互转换值类型的最佳方法是什么? 我应该使用C样式转换还是C ++样式转换?

您根本不需要演员,而是使用

size_t fileSize = file.tellg();

您根本不应该进行强制转换,而是(假设C ++ 11)使用auto ,即:

auto fileSize = m_file.tellg();

它将确保您不会使用错误的类型,并避免可能导致信息丢失的隐式强制转换(例如从较大的类型转换为较小的类型)。 另外,您不必担心实际的类型(键入可能很麻烦,而且可能会出错)。

C++11之前,我相信正确的做法是:

std::fstream::pos_type fileSize = m_file.tellg();

如果您拥有C++11则可以执行以下操作:

auto fileSize = m_file.tellg();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM