4

这与我之前询问是否std::chrono::steady_clock::now应该是的问题有关noexcept。现在我知道我应该想知道这个函数如何报告错误?例如,此函数在 Linux 上的常见实现使用 可能返回错误的clock_gettime 。

4

2 回答 2

7

clock_gettimeLinux工具可能报告的所有错误在std::chrono::steady_clock::now().

错误是:

int clock_gettime(clockid_t clk_id, struct timespec *tp);


EFAULT

tp 指向可访问地址空间之外。

没有用户提供tpstd::chrono::steady_clock::now(). 如果std::chrono::steady_clock::now()将错误传递tpclock_gettime,这只是一个steady_clock很容易修复的错误。

EINVAL

此系统不支持指定的 clk_id。

没有用户提供clk_idstd::chrono::steady_clock::now(). 如果std::chrono::steady_clock::now()将错误传递clk_idclock_gettime,那只是一个steady_clock必须修复的错误。

请注意,steady_clock不保证 的实现是可移植的,并且可能必须移植到任何给定平台并进行正确性测试。结果可能steady_clock无法clock_gettime在某些平台上实现。

EPERM

clock_settime() 无权设置指示的时钟。

不适用,steady_clock因为没有设置时间的 API。

于 2013-08-07T18:05:07.627 回答
1

它没有。API 中没有提供错误报告。因此,Linux 实现必须要么在内部处理错误,要么不返回(例如,通过exit()std::terminate())。

于 2013-08-07T17:35:54.583 回答