小编Nor*_*ask的帖子

符合标准的C++实现如何表明它不知道当前的日期和时间?

某些C++实现(例如,电池供电的嵌入式设备)可能没有用或无法跟踪当前的日期和时间.

的C标准具体地允许这样的实施方式.引用ISO/IEC 9899:1999 7.23.2.4(强调我的):

time函数返回实现对当前日历时间的最佳近似值.如果日历时间不可用,则返回值(time_t)( - 1).

C++ 11引入了chrono库和std::chrono::system_clock::now()函数,用于从系统范围的实时时钟获取挂钟时间.该函数被声明为noexcept,因此它不能抛出任何异常来指示不可用,也不允许返回任何特殊值(如-1C的情况).

但是对于C++ 11,C++ 14和C++ 17,仍然存在漏洞.标准没有指定时钟的纪元,因此符合要求的实施可以将纪元设置为启动时(或程序启动)并仍满足标准要求的时间点.

目前的C++ 20草案将填补这个漏洞并需要system_clock使用Unix时间.换句话说,不知道当前时间的C++实现是不符合的.

这是标准委员会的疏忽吗?符合标准的C++实现如何表明它不知道当前的日期和时间?

(请注意,在标准的其它部分这一问题得到解决.例如,一个实现可以设置__TIME__和__DATE__宏来实现自定义的值,如果实际时间和日期不详).

c++ time language-lawyer c++-chrono c++20

28
推荐指数
1
解决办法
977
查看次数

标签 统计

c++ ×1

c++-chrono ×1

c++20 ×1

language-lawyer ×1

time ×1