这与my previous question有关,我询问std::chrono::steady_clock::now
是noexcept
是{{1}}。现在我知道我应该想知道这个函数如何报告错误?例如,Linux上使用此函数的常见实现
clock_gettime可能会返回错误。
答案 0 :(得分:7)
clock_gettime
的调试实现中无法实现Linux std::chrono::steady_clock::now()
工具可能报告的所有错误。
错误是:
int clock_gettime(clockid_t clk_id, struct timespec *tp);
EFAULT
tp指向可访问的地址空间之外。
tp
中没有用户提供的std::chrono::steady_clock::now()
出错。如果std::chrono::steady_clock::now()
将错误的tp
传递给clock_gettime
,则steady_clock
中的错误很容易修复。
EINVAL
此系统不支持指定的clk_id。
clk_id
中没有用户提供的std::chrono::steady_clock::now()
出错。如果std::chrono::steady_clock::now()
将错误的clk_id
传递给clock_gettime
,则steady_clock
中的错误只是必须修复的错误。
请注意,steady_clock
的实现不保证是可移植的,可能必须移植到任何给定的平台并进行正确性测试。可能会发现steady_clock
无法在某些平台上以clock_gettime
的形式实施。
EPERM
clock_settime()无权设置指示的时钟。
不适用于steady_clock
,因为没有API来设置时间。
答案 1 :(得分:1)
没有。 API中没有用于错误报告的规定。因此,Linux实现必须在内部处理错误或不返回(例如,通过exit()
或std::terminate()
)。