2013-05-07 2 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 ключевое слово, ответ в визуальной студии довольно очевидно. Но как насчет общего дела?

+0

Просто примечание: '_NOEXCEPT' не является ключевым словом. Это макрос, специфичный для реализации, который расширяется до ключевого слова 'noexcept' для компиляторов, которые его поддерживают, и ничего для компиляторов, которые этого не делают. –

+0

@PeteBecker конечно – Arnaud

ответ

8

Может ли эта функция выдать исключение?

No, он не может.

В соответствии с пунктом 20.11.7/1 стандарта C++ 11, system_clock должен удовлетворять требованиям TrivialClock.

Кроме того, в соответствии с пунктом 20.11.3/4, функция now() членом часы, которые удовлетворяют TrivialClock требование не должно бросать:

тип 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

+0

@Arnaud: AFAIK последняя черновик n3485, а 'noexcept' есть –

+0

@AndyProwl Большое вам спасибо! Я не знал, что использовал очень старый проект. Я действительно думал, что я скачал последние. – Arnaud

Смежные вопросы