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_expression
true
birli 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_expression
false
iş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 const
ise 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 noexcept
std::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
)
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin