Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Operator "operator" winRT lub CLR ma parametr przekazany przez odwołanie. Operator WinRT lub CLR ma różne semantyki od operatora "operator" języka C++, czy zamierzasz przekazać wartość?
Uwagi
Przekazano wartość przez odwołanie do zdefiniowanego przez użytkownika środowisko wykonawcze systemu Windows lub operatora CLR. Jeśli wartość zostanie zmieniona wewnątrz funkcji, należy pamiętać, że wartość zwrócona po wywołaniu funkcji zostanie przypisana zwracana wartość funkcji. W standardowym języku C++zmieniona wartość jest odzwierciedlana po wywołaniu funkcji.
Przykład
Poniższy przykład generuje kod C4460 i pokazuje, jak go naprawić.
// 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
}