Bagikan melalui


/Zc:noexceptTypes (Aturan noexcept C++17)

Standar C++17 membuat throw() alias untuk noexcept, menghapus throw(type-list) dan throw(...), dan memungkinkan jenis tertentu untuk menyertakan noexcept. Perubahan ini dapat menyebabkan sejumlah masalah kompatibilitas sumber dalam kode yang sesuai dengan C++14 atau yang lebih lama. Opsi /Zc:noexceptTypes menentukan kesuaian dengan standar C++17. /Zc:noexceptTypes- memungkinkan perilaku C++14 dan yang lebih lama ketika kode dikompilasi dalam mode C++17.

Sintaks

/Zc:noexceptTypes[-]

Keterangan

/Zc:noexceptTypes Ketika opsi ditentukan, pengkompilasi sesuai dengan standar C++17 dan memperlakukan throw() sebagai alias untuk noexcept, menghapus throw()type-listdan throw(...), dan memungkinkan jenis tertentu untuk menyertakan .noexcept Opsi /Zc:noexceptTypes ini hanya tersedia ketika /std:c++17 atau yang lebih baru diaktifkan. /Zc:noexceptTypes diaktifkan secara default agar sesuai dengan standar ISO C++17 dan yang lebih baru. Opsi /permissive- tidak memengaruhi /Zc:noexceptTypes. Nonaktifkan opsi ini dengan menentukan /Zc:noexceptTypes- untuk kembali ke perilaku C++14 kapan noexcept/std:c++17 atau yang lebih baru ditentukan.

Dimulai di Visual Studio 2017 versi 15.5, pengkompilasi C++ mendiagnosis spesifikasi pengecualian yang lebih tidak cocok dalam deklarasi dalam mode C++17, atau saat Anda menentukan /permissive- opsi.

Sampel ini menunjukkan bagaimana deklarasi dengan penentu pengecualian berperilaku saat /Zc:noexceptTypes opsi diatur atau dinonaktifkan. Untuk menampilkan perilaku saat diatur, kompilasi dengan menggunakan cl /EHsc /W4 noexceptTypes.cpp. Untuk menampilkan perilaku saat dinonaktifkan, kompilasi dengan menggunakan cl /EHsc /W4 /Zc:noexceptTypes- noexceptTypes.cpp.

// 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
};

Saat dikompilasi dengan menggunakan pengaturan /Zc:noexceptTypesdefault , sampel menghasilkan peringatan yang tercantum. Untuk memperbarui kode Anda, gunakan yang berikut:

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

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

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

Untuk informasi selengkapnya tentang masalah kesuaian di Visual C++, lihat Perilaku Nonstandar.

Untuk mengatur opsi pengkompilasi ini di lingkungan pengembangan Visual Studio

  1. Buka kotak dialog Halaman Properti proyek. Untuk detailnya, lihat Mengatur pengkompilasi C++ dan membuat properti di Visual Studio.

  2. Pilih halaman properti Properti>Konfigurasi C/C++>Baris Perintah.

  3. Ubah properti Opsi Tambahan untuk disertakan /Zc:noexceptTypes atau /Zc:noexceptTypes- lalu pilih OK.

Baca juga

/Zc (Kesuaian)
noexcept
Spesifikasi pengecualian (throw)