簡體   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