Mam klasę A, którą przeciążam jej operator =. Jednak jest to wymagane, że muszę zrobić coś takiego:C++ lotne i przeciążenie operatora dla aplikacji CUDA
volatile A x;
A y;
x = y;
który zgłosił błąd podczas kompilacji
error: no operator "=" matches these operands
operand types are: volatile A = A
Jeśli usunąłem lotny, to compilable. Czy istnieje i tak, aby to skompilować bez usuwania "volatile" (i nadal zachowują zachowanie niestabilne)?
Zasadniczo jest to program CUDA, w którym „x” jest wspólna pamięć (wszystkie wątki mogą zmienić jego wartość). Chcę, aby był "niestabilny", aby uniknąć optymalizacji kompilatora i ponownie użyć wartości zamiast dostępu do adresu pamięci.
Więcej o problemie: na początku A jest typem prostym, np. Liczba całkowita, lotna działa zgodnie z oczekiwaniami i nie powoduje żadnych problemów, teraz chcę, aby była to klasa niestandardowa (na przykład 128-bitowa) . Nie jestem pewien, dlaczego C++ narzeka w tym przypadku, ale nie z pierwotnym typem danych.
Z góry dziękuję.
Dzięki! Jest skompilowany. ale szkoda :(, to daje mi takie samo zachowanie nielotnego – w00d
@iKid: jakiego zachowania oczekiwałeś od 'volatile'? –
Dodałem wyjaśnienie do mojego pytania – w00d