Постфиксный инкремент для пользовательского типа.
От: BugZ Россия  
Дата: 09.04.07 10:40
Оценка:
Добрый день!

Объясните, пожалуйста, почему выполняется 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;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.