/Zc:noexceptTypes (C++17 noexcept kuralları)

C++17 standardı, için bir diğer ad oluştururthrow(), kaldırır throw()type-listve throw(...)bazı türlerin içermesine noexceptizin verir.noexcept Bu değişiklik, kodda C++14 veya önceki sürümlere uygun bir dizi kaynak uyumluluğu sorununa neden olabilir. /Zc:noexceptTypes seçeneği C++17 standardına uyumluluğu belirtir. /Zc:noexceptTypes- , kod C++17 modunda derlendiğinde C++14 ve önceki davranışlara izin verir.

Sözdizimi

/Zc:noexceptTypes[-]

Açıklamalar

Seçenek belirtildiğinde/Zc:noexceptTypes, derleyici C++17 standardına uyar ve için noexceptbir diğer ad olarak davranırthrow(), throw()type-listve throw(...)kaldırır ve bazı türlerin içermesine noexceptizin verir. Bu /Zc:noexceptTypes seçenek yalnızca veya daha sonraki bir sürüm etkinleştirildiğinde /std:c++17 kullanılabilir. /Zc:noexceptTypes varsayılan olarak ISO C++17 ve üzeri standartlarına uyacak şekilde etkinleştirilir. seçeneği'ni /permissive- etkilemez /Zc:noexceptTypes. Veya daha sonra belirtildiğinde /std:c++17 C++14 davranışına noexcept geri dönüleceğini belirterek /Zc:noexceptTypes- bu seçeneği kapatın.

Visual Studio 2017 sürüm 15.5'den başlayarak, C++ derleyicisi C++17 modundaki bildirimlerde veya seçeneği belirttiğinizde /permissive- daha uyumsuz özel durum belirtimlerini tanılar.

Bu örnek, bir özel durum tanımlayıcısı olan bildirimlerin seçenek ayarlandığında veya devre dışı bırakıldığında nasıl davrandığını /Zc:noexceptTypes gösterir. Ayarlanırken davranışı göstermek için kullanarak cl /EHsc /W4 noexceptTypes.cppderleyin. Devre dışı bırakıldığında davranışı göstermek için kullanarak cl /EHsc /W4 /Zc:noexceptTypes- noexceptTypes.cppderleyin.

// noexceptTypes.cpp
// Compile by using: cl /EHsc /W4 noexceptTypes.cpp
// Compile by using: cl /EHsc /W4 /Zc:noexceptTypes- noexceptTypes.cpp

void f() throw();    // equivalent to void f() noexcept;
void f() { }         // warning C5043
void g() throw(...); // warning C5040

struct A
{
    virtual void f() throw();
};

struct B : A
{
    virtual void f() { } // error C2694
};

Varsayılan ayarı /Zc:noexceptTypeskullanılarak derlendiğinde, örnek listelenen uyarıları oluşturur. Kodunuzu güncelleştirmek için bunun yerine aşağıdakileri kullanın:

void f() noexcept;
void f() noexcept { }
void g() noexcept(false);

struct A
{
    virtual void f() noexcept;
};

struct B : A
{
    virtual void f() noexcept { }
};

Visual C++'daki uyumluluk sorunları hakkında daha fazla bilgi için bkz . Standart Dışı Davranış.

Bu derleyici seçeneğini Visual Studio geliştirme ortamında ayarlamak için

  1. Projenin Özellik Sayfaları iletişim kutusunu açın. Ayrıntılar için bkz . Visual Studio'da C++ derleyicisi ve derleme özelliklerini ayarlama.

  2. Yapılandırma Özellikleri>C/C++>Komut Satırı özellik sayfasını seçin.

  3. Ek Seçenekler özelliğini veya içerecek /Zc:noexceptTypes- /Zc:noexceptTypes şekilde değiştirin ve ardından Tamam'ı seçin.

Ayrıca bkz.

/Zc (Uyumluluk)
noexcept
Özel durum belirtimleri (throw)