/Zc:strictStrings
(Nonaktifkan konversi jenis literal string)
Ketika ditentukan, pengkompilasi memerlukan kesuaian -kualifikasi yang ketat const
untuk penunjuk yang diinisialisasi dengan menggunakan literal string.
Sintaks
/Zc:strictStrings
[-
]
Keterangan
Jika /Zc:strictStrings
ditentukan, kompilator memberlakukan kualifikasi C++ const
standar untuk literal string, sebagai jenis 'array ' const char
atau 'array dari const wchar_t
', tergantung pada deklarasi. Literal string tidak dapat diubah, dan upaya untuk memodifikasi konten dari satu menghasilkan kesalahan pelanggaran akses pada waktu proses. Anda harus mendeklarasikan penunjuk const
string untuk menginisialisasinya dengan menggunakan string literal, atau menggunakan eksplisit const_cast
untuk menginisialisasi non-pointerconst
. Secara default, atau jika /Zc:strictStrings-
ditentukan, pengkompilasi tidak memberlakukan kualifikasi C++ const
standar untuk penunjuk string yang diinisialisasi dengan menggunakan literal string.
Opsi /Zc:strictStrings
nonaktif secara default. Opsi /permissive-
kompilator secara implisit mengatur opsi ini, tetapi dapat ditimpa dengan menggunakan /Zc:strictStrings-
.
/Zc:strictStrings
Gunakan opsi untuk mencegah kompilasi kode yang salah. Contoh ini menunjukkan bagaimana kesalahan deklarasi sederhana menyebabkan crash pada waktu proses:
// strictStrings_off.cpp
// compile by using: cl /W4 strictStrings_off.cpp
int main() {
wchar_t* str = L"hello";
str[2] = L'a'; // run-time error: access violation
}
Ketika /Zc:strictStrings
diaktifkan, kode yang sama melaporkan kesalahan dalam deklarasi str
.
// strictStrings_on.cpp
// compile by using: cl /Zc:strictStrings /W4 strictStrings_on.cpp
int main() {
wchar_t* str = L"hello"; // error: Conversion from string literal
// loses const qualifier
str[2] = L'a';
}
Jika Anda menggunakan auto
untuk mendeklarasikan penunjuk string, pengkompilasi membuat deklarasi jenis penunjuk yang benar const
untuk Anda. Upaya untuk mengubah konten const
pointer dilaporkan oleh pengkompilasi sebagai kesalahan.
Catatan
Pustaka Standar C++ di Visual Studio 2013 tidak mendukung /Zc:strictStrings
opsi pengkompilasi dalam build debug. Jika Anda melihat beberapa kesalahan C2665 dalam output build Anda, ini mungkin penyebabnya.
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:strictStrings
lalu pilih OK.
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk