15 Mayıs 2018 Salı

C++ ve noexcept

noexcept operator
Açıklaması şöyle.
Having the noexcept(x) specifier in a function declaration means that the function is non-throwing if and only if x evaluates to true.
Metodun exception atıp atmadığını döndürür. Şöyle yaparız.
struct X
{
    ~X() { };
};

int main()
{
    X x;

 
    static_assert(noexcept(x.~X()), "Ouch!");
}
noexcept ve default argument
Default argument çağıran tarafından yaratıldığı için şöyle yaparız.
void test(const Item& item = Item()) noexcept {
   ...
}
noexcept(x)
Açıklaması şöyle.
Having the noexcept(x) specifier in a function declaration means that the function is non-throwing if and only if x evaluates to true.
Örnek
Şöyle yaparız.
template <class T, size_t N>
void swap(T (&a)[N], T (&b)[N]) noexcept(noexcept(swap(*a, *b)));
noexcept (true) - exception fırlatılmaz
Bazı metodların imzasında noexcept(true) kelimesi görülür. Bu kelime metodun exception fırlatmayacağını garanti ettiği anlamına gelir.
Any of the functions defined in the C++ standard library can report a failure by throwing an exception of a type described in its Throws: paragraph. An implementation may strengthen the exception specification for a non-virtual function by adding a non-throwing noexcept-specification.
Eğer bir metodu kalıtır ve imzadaki noexcept'i kullanmayı ihmal edersek şöyle bir uyarı alırız.
looser throw specifier for ‘virtual ...’
Açıklaması şöyle.
C++ used to have some form of checked exceptions, you may have noticed it has been deprecated and simplified toward a basic noexcept(<bool>) instead: either a function is declared to possibly throw, or it's declared never to.
noexcept (false)
noexcept (true)'nun tersi noexcept(false) gibi düşünülüyor ancak bu şekilde kullansak ta metodun exception fırlatıp fırlatmamasıyla ilgili bir şey belirtmiş olmayız.
A function with no exception-specification or with an exception-specification of the form noexcept(constant-expression) where the constant-expression yields false allows all exceptions. An exception-specification is non-throwing if it is of the form throw(), noexcept, or noexcept(constant-expression) where the constant-expression yields true. A function with a non-throwing exception-specification does not allow any exceptions.


Hiç yorum yok:

Yorum Gönder