簡體   English   中英

在進行make install時,有符號和無符號整數表達式之間的比較警告?

[英]comparison between signed and unsigned integer expressions warning while make install?

我正在運行下面的代碼,該代碼檢查data_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;
}

而且我上面的代碼工作正常,但是對此if語句比較有一個警告-

if (data_timestamp < millis) {

我看到的警告是-

warning: comparison between signed and unsigned integer expressions [-Wsign-compare]

如何刪除此警告? 我想將data_timestamp保留為uint64_t因為在實際代碼中,它也像在其他地方一樣被使用。

您可以將millis轉換為uint64_t 您遇到的問題是millis已簽名,因此可以通過將其強制轉換為未簽名的類型來對其進行修復。

if (data_timestamp < (uint64_t)millis) {
    std::cout << "Hello";
} else {
    std::cout << "World";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM