下面的代碼:如何使用顯式強制轉換來抑制此警告?
#include <cstdint>
#include <vector>
#include <boost/range/irange.hpp>
int main() {
int64_t first = 0, last = 10;
std::vector<double> result = boost::copy_range<std::vector<double>>(boost::irange(first, last));
}
生成警告(和100+線模板調用堆棧跟蹤):我想告訴大家,我不在乎,我int64_t
編譯器
1>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xmemory0(600):
warning C4244: 'initializing' : conversion from 'unsigned __int64' to 'double', possible loss of data
正在轉換爲double
。我也不想使用32位int。我通常會使用static_cast<double>(my64BitInt)
來解決這個問題,但這不適用於一個範圍。現在我正在使用編譯器編譯來壓制警告,但這並不理想。
編輯:這是一個pastebin與完整的編譯器輸出。
1)您可以在您的項目設置,而不是與編譯指示禁止警告,如果你認爲你永遠不會關心這個。 2)爲什麼'first'和'last'聲明爲'int64_t'而不是'double'? – celticminstrel
Visual Studio中的@celticminstrel編譯指示允許您抑制特定代碼行的警告,並使其保留在項目的其餘部分。 – IronMensan
我知道。 (你也可以用clang/gcc來完成,雖然語法有些不同)。我只是指出它的部分原因,因爲我個人發現這個特殊的警告無用而且有用,部分如果你碰巧同意。 – celticminstrel