可以std :: chrono :: system_clock :: now()抛出异常吗?

Arn*_*aud 2 c++ portability language-lawyer c++11 c++-chrono

我想写一个非常可移植的代码,我需要std::chrono::system_clock::now()在初始化时调用.这个函数可以抛出异常吗?

在c ++ 11标准中,没有提到该问题.(至少,我没找到一个)

在Visual Studio中,源代码如下:

static time_point now() _NOEXCEPT
    {   // get current time
    return (time_point(duration(_Xtime_get_ticks())));
    }
Run Code Online (Sandbox Code Playgroud)

使用_NOEXCEPT关键字,visual studio中的答案非常明显.但一般情况呢?

Pra*_*ian 11

来自§20.11.7.1

class system_clock {
public:
  ...
    static time_point now() noexcept;  
  ...
};
Run Code Online (Sandbox Code Playgroud)

所以标准规定它不能抛出异常.


And*_*owl 8

这个函数可以抛出异常吗?

,它不能.

根据C++ 11标准的第20.11.7/1段,system_clock必须满足TrivialClock要求.

此外,根据第20.11.3/4段now(),满足TrivialClock要求的时钟的成员功能不得抛出:

在以下情况下,类型TC符合TrivialClock要求:

[...]

- 该函数TC::now()不会抛出异常,并且

[...]