2013-05-07 43 views
2

我想寫一個非常便攜的代碼,我需要在初始化中調用std::chrono::system_clock::now()。這個函數可以拋出異常嗎?可以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中的答案是很明顯的。但是一般情況呢?

+0

請注意:'_NOEXCEPT'不是關鍵字。它是一個特定於實現的宏,對於支持它的編譯器擴展爲關鍵字「noexcept」,對沒有編譯器的編譯器則沒有。 – 2013-05-07 15:27:16

+0

@PeteBecker當然是 – Arnaud 2013-05-07 15:33:14

回答

8

該函數可以拋出異常嗎?

,它不能。

C++ 11標準的第20.11.7/1段中,system_clock必須滿足TrivialClock的要求。

此外,每個段落20.11.3/4,鐘錶滿足TrivialClock要求應不扔的now()成員函數:

A型TC滿足TrivialClock要求,如果:

[。 ..]

- 功能TC::now()沒有拋出異常,並

[...]

11

從§20.11.7.1

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

所以標準規定它不能拋出異常。

+0

你有最終的C++ 11標準嗎?我只有最新的草案,並在20.11.7.1我只有這個:static time_point now(); – Arnaud 2013-05-07 15:43:23

+0

@Arnaud:AFAIK最新稿是n3485,而'noexcept'有 – 2013-05-07 15:53:11

+0

@AndyProwl非常感謝!我沒有意識到我在使用一個非常古老的草稿。我真的以爲我下載了最新的。 – Arnaud 2013-05-08 07:25:02

相關問題