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";
}