Aracılığıyla paylaş


noexcept (C++)

C++11: bir işlevin özel durumlar oluşturup oluşturamayacağını belirtir.

Sözdizimi

noexcept-specifier:
noexcept
noexcept-expression
throw ( )
noexcept-expression:
noexcept ( constant-expression )

Parametreler

constant-expression
Olası özel durum türleri kümesinin boş olup olmadığını gösteren tür bool sabit ifadesi. Koşulsuz sürüm ile noexcept(true)eşdeğerdir.

Açıklamalar

A noexcept-expression bir tür özel durum belirtimidir: bir işlevden çıkan herhangi bir özel durum için özel durum işleyicisi tarafından eşleştirilebilen bir tür kümesini temsil eden işlev bildirimine sonek. veriminde constant_expressiontruebirli koşullu işleç noexcept(constant_expression) ve koşulsuz eş anlamlısınoexcept, işlevden çıkabilecek olası özel durum türleri kümesinin boş olduğunu belirtir. Başka bir ifadeyle, işlev hiçbir zaman bir özel durum oluşturmaz ve hiçbir zaman bir özel durumun kapsamı dışına yayılmasına izin vermez. veriminde constant_expressionfalseişleç noexcept(constant_expression) veya özel durum belirtiminin olmaması (yıkıcı veya serbest bırakma işlevi dışında), işlevden çıkabilecek olası özel durumlar kümesinin tüm türlerden oluşan küme olduğunu gösterir.

Bir işlevi yalnızca doğrudan veya dolaylı olarak çağıran tüm işlevler de noexcept veya constise olarak noexcept işaretleyin. Derleyici her kod yolunu bir noexcept işleve kadar kabarcık oluşturabilecek özel durumlar için denetlemez. Özel durum işaretli noexceptstd::terminate bir işlevin dış kapsamından çıkarsa hemen çağrılır ve kapsam içi nesnelerin yıkıcılarının çağrılacağı garanti edilemez. Dinamik özel durum tanımlayıcısı throw()yerine kullanınnoexcept. Dinamik özel durum belirtimi veya throw(optional_type_list) belirtimi, C++11'de kullanım dışı bırakıldı ve C++17'de kaldırıldı. Bunun dışındathrow(), diğer adıdırnoexcept(true). Çağrı yığınını yaymak için hiçbir zaman özel duruma izin vermeyen herhangi bir işleve uygulamanızı noexcept öneririz. bir işlev bildirildiğinde noexcept, derleyicinin birkaç farklı bağlamda daha verimli kod oluşturmasını sağlar. Daha fazla bilgi için bkz . Özel durum belirtimleri.

Örnek

Bağımsız değişkenini kopyalayan bir işlev şablonu, kopyalanan nesnenin düz eski bir veri türü (POD) olması koşuluyla bildirilebilir noexcept . Böyle bir işlev şu şekilde bildirilebilir:

#include <type_traits>

template <typename T>
T copy_object(const T& obj) noexcept(std::is_pod<T>)
{
   // ...
}

Ayrıca bkz.

Özel durumlar ve hata işleme için modern C++ en iyi yöntemleri
Özel durum belirtimleri (throw, noexcept)