2

我想写一个非常便携的代码,我需要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 中的答案非常明显。但是一般情况呢?

4

2 回答 2

11

从§20.11.7.1

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

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

于 2013-05-07T15:21:32.410 回答
9

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

,它不能。

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

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

如果满足以下条件,则类型TC满足TrivialClock要求:

[...]

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

[...]

于 2013-05-07T15:21:53.937 回答