Compiler Warning (level 4) C4840
penggunaan non-portabel dari kelas 'type' sebagai argumen ke fungsi variadik
Keterangan
Kelas atau struktur yang diteruskan ke fungsi variadik harus dapat disalin secara sepele. Saat meneruskan objek tersebut, pengkompilasi hanya membuat salinan bitwise dan tidak memanggil konstruktor atau destruktor.
Peringatan ini tersedia dimulai di Visual Studio 2017.
Contoh
Sampel berikut menghasilkan C4840 dan menunjukkan cara memperbaikinya:
// C4840.cpp
// compile by using: cl /EHsc /W4 C4840.cpp
#include <stdio.h>
int main()
{
struct S {
S(int i) : i(i) {}
S(const S& other) : i(other.i) {}
operator int() { return i; }
private:
int i;
} s(0);
printf("%i\n", s); // warning C4840 : non-portable use of class 'main::S'
// as an argument to a variadic function
// To correct the error, you can perform a static cast
// to convert the object before passing it:
printf("%i\n", static_cast<int>(s));
}
Untuk string yang dibangun dan dikelola menggunakan CStringW
, yang disediakan operator LPCWSTR()
harus digunakan untuk mentransmisikan CStringW
objek ke penunjuk string gaya C yang diharapkan oleh string format:
CStringW str1;
CStringW str2;
// ...
str1.Format("%s", static_cast<LPCWSTR>(str2));
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