C++ 进行安装时有符号和无符号整数表达式之间的比较警告?
我正在运行下面的代码,检查C++ 进行安装时有符号和无符号整数表达式之间的比较警告?,c++,boost,C++,Boost,我正在运行下面的代码,检查data\u timestamp是否超过两周。如果超过两周,则打印hello,否则打印world #include <boost/chrono/chrono.hpp> #include <iostream> int main() { uint64_t data_timestamp = 1406066507000; const boost::chrono::system_clock::time_point now = boost
data\u timestamp
是否超过两周。如果超过两周,则打印hello
,否则打印world
#include <boost/chrono/chrono.hpp>
#include <iostream>
int main()
{
uint64_t data_timestamp = 1406066507000;
const boost::chrono::system_clock::time_point now = boost::chrono::system_clock::now();
boost::chrono::hours twoWeeks = boost::chrono::hours(24 * 14);
boost::chrono::system_clock::time_point lastTwoWeeks = now - twoWeeks;
boost::int_least64_t millis = boost::chrono::duration_cast<boost::chrono::milliseconds>(lastTwoWeeks.time_since_epoch()).count();
std::cout << "Time stamp in milliseconds since UNIX epoch start: "<< millis << std::endl;
if (data_timestamp < millis) {
std::cout << "Hello";
} else {
std::cout << "World";
}
return 0;
}
如何删除此警告?我希望将
数据\u时间戳
保留为uint64\u t
,因为在实际代码中,它也像在其他地方一样被使用。您可以将毫秒
转换为uint64\u t
。您遇到的问题是,millis
是有符号的,因此您可以通过将其强制转换为无符号类型来修复它
if (data_timestamp < (uint64_t)millis) {
std::cout << "Hello";
} else {
std::cout << "World";
}
if(数据时间戳<(uint64)毫秒){
std::我明白了吗,如果millis
为负值,这会是一个问题吗?或者你认为millis
可以为负值吗?@user2809564看着代码,millis
不能为负值。它是现在两周内的毫秒数,总是正值。
warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if (data_timestamp < (uint64_t)millis) {
std::cout << "Hello";
} else {
std::cout << "World";
}