Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
WinRT ou operador CLR 'operator', tem um parâmetro que é passado por referência. WinRT ou o operador CLR 'operador' tem semântica diferente do operador C++ 'operador'; pretendia passar por valor?
Observações
Você passou um valor por referência a um operador de Runtime do Windows ou CLR definido pelo usuário. Se o valor for alterado dentro da função, observe que o valor retornado após a chamada de função receberá o valor de retorno da função. Em C++ padrão, o valor alterado é refletido após a chamada de função.
Example
O exemplo a seguir gera C4460 e mostra como corrigi-lo.
// 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
}