Avertissement du compilateur (niveau 4) C4460
paramètre de l'opérateur WinRT ou CLR 'opérateur' passé par référence. L'opérateur WinRT ou CLR 'opérateur' a une sémantique différente de celle de l'opérateur C++ 'opérateur', voulez-vous effectuer un passage par valeur ?
Vous avez passé une valeur par référence à un opérateur CLR ou Windows Runtime défini par l'utilisateur. Si la valeur est modifiée dans la fonction, notez que la valeur de retour de la fonction sera attribuée à la valeur retournée après l'appel de fonction. En C++ standard, la valeur modifiée est reflétée après l'appel de fonction.
Exemple
L'exemple suivant génère l'avertissement C4460 et montre comment le corriger.
// 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
}
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour