下面的代码:如何使用显式强制转换来抑制此警告?
#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