Во-первых, можно ли как-нибудь узнать полное имя типа в с++?
Я обычно использую typeid(...)
, однако в один момент это сыграло против меня, т.к. в подобном коде сравнение typeid показало true:
struct mystr{
int value;
mystr(const int value) : value(value){}
mystr operator+(mystr& other) { return mystr(value + other.value); }
};
int main(){
mystr var(6);
( typeid(mystr(6)) == typeid(var) ); // true
var+var; //корректно
mystr(6)+mystr(6); //Error, нет оператора "+" для данных операндов
return 0;
}
P.S. Как я понял, ошибка в том, что я передавал rvalue по ссылке, но почему так делать нельзя?
Во-вторых, только учусь, но хочу заниматься openGL/Vulcan/OpenCL/CUDA - т.е. тем, что строится на оптимизации, поэтому хотелось бы узнать название каких либо современных книг(желательно на русском) об оптимизации и о том, что кроется за абстракцией С++.
У вас проблема в том, что вы пытаетесь сложить два rvalue, не имея для этого нужного метода. То есть ваш метод operator+
здесь не подходит, так как не может работать с rvalue. Чтобы это исправить либо сделайте так:
mystr operator+(mystr&& other) { return mystr(value + other.value); }
либо (что, ИМХО, гораздо лучше), добавьте константность:
mystr operator+(const mystr& other) const { return mystr(value + other.value); }
P. S. Вы в вопросе указали: «но объект мы никак не изменяем» — вы-то, может, знаете, что объект не меняется, вот только об этом нужно сказать компилятору.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Всем приветТакая задача: нужно реализовать долгое нажатие кнопки
Имеется две активности: первая -карта, вторая - просто пустая активностьСценарий такой: покрутили, попередвигали карту (первая активность),...
Ребят, можете подсказать, если плагины/инструменты чтобы отчеты по JMeter более наглядно показывалисьВроде примерно разобрался как смотреть,...
У меня есть SeekBar , при скроллинге его значения умножается на 20000(мелочи расчетов), и сразу же отображается в другом блоке в виде ценыС Этим все...