Я попытался обновить свои знания на C++ и нашел странное поведение. Когда я объявил класс и перегрузил в нем оператор, я забыл, что оператор имеет возвращаемое значение. Это вызвало некоторое поведение, которое я не могу объяснить. Вот код:определение оператора класса C++ без возвращаемого значения
class myClass{
double i;
myClass(double value): i(value){}
myClass operator+ (const double ¶m)
{
i = i + param;
}
};
Таким образом, оператор + должен возвращать значение с типом MyClass, но вместо этого он просто добавляет параметров члену я. Когда я попробовал этот оператор в моей программе по
myClass A(10.5);
A+10.0;
результат равен а.и. = 20,5, так как я бы ожидать. Но если я изменю код на
A = A + 10.0;
В результате получается A.i = nan или какое-то очень небольшое число. Я понял, что оператор + должен возвращать значение по определению, но я не добавил возврата к его определению. Мой вопрос: что возвращается в этом случае? Какой-то случайный размер мусора из памяти? Почему компилятор не применяет, чтобы добавить возврат к определению оператора, если ожидается, что оно вернет значение с типом myClass?
Вкратце: то, что вы написали, имеет неопределенное поведение, компилятор не должен его ловить, и что-то вообще может произойти во время выполнения. – Mat
'A + 10.0;' не должен изменять членов A, это то, что для 'operator + =' для! Это просто супер смущает – stijn
Да, это сбивает с толку. Сначала я попробовал A = A + 10.0, и когда понял, что не работает так, как я ожидал, я попробовал простой A + 10.0. Я бы не использовал этот способ своим оператором, просто попытался, если он сработает. –