Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 ?
Remarques
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’erreur C4460 et montre comment la 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
}