Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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
Buka kotak dialog Halaman Properti proyek. Untuk detailnya, lihat Mengatur pengkompilasi C++ dan membuat properti di Visual Studio.
Pilih halaman properti Properti>Konfigurasi C/C++>Baris Perintah.
Ubah properti Opsi Tambahan untuk disertakan
/Zc:noexceptTypesatau/Zc:noexceptTypes-lalu pilih OK.