Compiler Warning (level 4) C4460
Operator WinRT atau CLR 'operator', memiliki parameter yang diteruskan oleh referensi. Operator WinRT atau CLR 'operator' memiliki semantik yang berbeda dari operator C++ 'operator', apakah Anda ingin melewati nilai?
Anda meneruskan nilai berdasarkan referensi ke operator Windows Runtime atau CLR yang ditentukan pengguna. Jika nilai diubah di dalam fungsi, perhatikan bahwa nilai yang dikembalikan setelah panggilan fungsi akan diberi nilai pengembalian fungsi. Di C++standar, nilai yang diubah tercermin setelah panggilan fungsi.
Contoh
Sampel berikut menghasilkan C4460 dan menunjukkan cara memperbaikinya.
// C4460.cpp
// compile with: /W4 /clr
#include <stdio.h>
public value struct V {
static V operator ++(V& me) { // C4460
// try the following line instead
// static V operator ++(V me) {
printf_s(__FUNCSIG__ " called\n");
V tmp = me;
me.m_i++;
return tmp;
}
int m_i;
};
int main() {
V v;
v.m_i = 0;
printf_s("%d\n", v.m_i); // Should print 0
v++; // Translates to "v = V::operator ++(v)"
printf_s("%d\n", v.m_i); // will print 0, hence the warning
}
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