[英]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.