Добрый день!
Объясните, пожалуйста, почему выполняется my_int++ = ++my_int; в приведённом ниже примере.
Для встроенных типов постфиксный инкремент возвращает r-value.
Тут, насколько я понимаю, после выполнения постфиксного ++ создается временная копия объекта, которая будет разрушена после ; (выход из scope).
И она l-value (?).
Распишите, пожалуйста механизмы происходящего. Запутался.
#include <iostream>
class MyInt {
public: MyInt( const MyInt& r ): i(r.i) {
std::cout << "MyInt(copy)" << endl; }
public: MyInt( int initial_i ): i(initial_i) {
std::cout << "MyInt(int)" << endl; }
// =
MyInt& operator=(const MyInt& r){
std::cout << "MyInt(=)" << endl;
i = r.i;
return *this;
}
// prefix
MyInt& operator ++ () {
++i;
return *this;
}
// postfix
MyInt operator ++ ( int fake ) {
MyInt old_value( *this );
++i;
return old_value;
}
int i;
};
int main(int argc, char* argv[])
{
MyInt my_int( 0 );
my_int++ = ++my_int;
cout << "my_int=" << my_int.i << endl;
char c;
cin >> c;
return 0;
}