У меня есть класс A, который я перегружаю его оператором =. Однако это необходимо, что мне нужно сделать что-то вроде этого:C++ volatile и перегрузка оператора для приложения CUDA
volatile A x;
A y;
x = y;
который поднял ошибку при компиляции
error: no operator "=" matches these operands
operand types are: volatile A = A
Если я удалил изменчив, это компилируется. Нужно ли это скомпилировать, не удаляя «изменчивый» (и все еще сохраняя поведение волатильности)?
В основном это программа CUDA, в которой «х» является совместно используемой памяти (все потоки могут получать доступ и изменять его значение). Я хочу, чтобы он был «изменчивым», чтобы избежать оптимизации компилятора и повторного использования значения вместо доступа к адресу памяти.
Подробнее об этой проблеме: в начале A является просто примитивным типом, например integer, volatile работает как ожидалось и не вызывает никаких проблем, теперь я хочу, чтобы это был пользовательский класс (например, 128-битный целочисленный) , Я не уверен, почему C++ жалуется в этом случае, но не на примитивный тип данных.
Заранее спасибо.
Спасибо! Он скомпилирован. но слишком плохо :(, это дает мне такое же поведение нестабильности – w00d
@iKid: какое поведение вы ожидали от 'volatile'? –
Я добавил объяснение на мой вопрос – w00d