gpt4 book ai didi

c++ - C++11 chrono 有哪些替代方案?

转载 作者:太空宇宙 更新时间:2023-11-04 15:39:56 24 4
gpt4 key购买 nike

我正在运行下面的代码来检查是否 data_timestamp是否超过两周大。如果超过两周,则打印 hello否则打印 world .

我是一名 Java 开发人员,最近开始使用 C++。在互联网上学到了一些东西,所以我在这个程序中使用它。我没有意识到并非所有代码都可以使用 C++11 功能运行。

#include <ctime>
#include <chrono>
#include <iostream>

int main()
{

uint64_t data_timestamp = 1406066507000;

const auto now = std::chrono::system_clock::now();
auto twoWeeks = std::chrono::hours(24 * 14);
auto lastTwoWeeks = now - twoWeeks;

auto millis = std::chrono::duration_cast<std::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;
}

目前上面的代码使用 C++11 功能,但我使用上述两周前时间戳的代码逻辑的实际代码不支持 C++11,所以我正在寻找各种替代方案。

我还能在这里使用哪些不需要 C++11 可移植性的东西?我可以使用 <ctime> 吗?或 Boost.Chrono这里?

任何与上述代码执行相同操作但不使用 C++11 功能的简单示例都会有很大帮助。

更新:-

下面是我正在尝试的代码-

#include <boost/chrono/chrono.hpp>
#include <iostream>

int main()
{
uint64_t data_timestamp = 1406066507000;

const auto now = boost::chrono::system_clock::now();
auto twoWeeks = boost::chrono::hours(24 * 14);
auto lastTwoWeeks = now - twoWeeks;

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

当我使用 make install -j4 编译代码时下面是我要回来的异常(exception)-

warning: âautoâ changes meaning in C++11; please remove it [-Wc++0x-compat]
error: ânowâ does not name a type
warning: âautoâ changes meaning in C++11; please remove it [-Wc++0x-compat]
error: âtwoWeeksâ does not name a type
warning: âautoâ changes meaning in C++11; please remove it [-Wc++0x-compat]
error: âlastTwoWeeksâ does not name a type
warning: âautoâ changes meaning in C++11; please remove it [-Wc++0x-compat]
error: âmillisâ does not name a type
error: âmillisâ was not declared in this scope

最佳答案

我会建议 boost::chrono,因为 C++11 规范主要基于 boost::date_time(阅读诸如 this one 之类的建议揭示了如何much boost 被用作 std::chrono 的基础)。正如 Howard Hinnant 评论的那样,boost::chrono 然后从 std::chrono

复制

一旦您获得可用的 C++11 编译器(易于移植到 std::),它也会使您的事情变得更容易


一个简单的例子:

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

关于c++ - C++11 chrono 有哪些替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25170958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com