Bagikan melalui


/Zc:strictStrings (Nonaktifkan konversi jenis literal string)

Ketika ditentukan, pengkompilasi memerlukan kesuaian -kualifikasi yang ketat constuntuk 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 charatau '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

  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:strictStrings lalu pilih OK.

Baca juga

/Zc (Kesuaian)