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

时间:2013-05-07 15:18:57

标签: c++ c++11 portability language-lawyer 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())));
    }

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

2 个答案:

答案 0 :(得分:11)

来自§20.11.7.1

class system_clock {
public:
  ...
    static time_point now() noexcept;  
  ...
};

因此标准规定它不能抛出异常。

答案 1 :(得分:8)

  

此函数可以抛出异常吗?

没有,它不能。

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

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

  

如果出现以下情况,TC类型符合TrivialClock要求:

     

[...]

     

- 函数TC::now()不会抛出异常

     

[...]