Ошибки, баги, вопросы - страница 1705

 
fxsaber:
Туплю. Подскажите, почему так нельзя?
Понял.
 
fxsaber:
Понял.
Объясните
 
Комбинатор:
Объясните
Не получится - терминологический пробел.
 
Комбинатор:
Объясните
this[0] здесь - rvalue.
 
Sergei Vladimirov:
this[0] здесь - rvalue.

Вот это и непонятно.

Если присвоение работает в первом случае, по логике оно должно работать и во втором. Потому что в первом случае указателю присваивается тот же rvalue, но оператор потом работает!

Это конечно исключительно мое мнение. Но разобраться охота.

 
Комбинатор:

Вот это и непонятно.

Мне тоже непонятно. )) Upd. Уже понятно. 

Если присвоение работает в первом случае, по логике оно должно работать и во втором. Потому что в первом случае указателю присваивается тот же rvalue, но оператор потом работает!

Это конечно исключительно мое мнение. Но разобраться охота. 

rvalue только и может, что присваиваться левостороннему значению или быть временной константой.

Вот это в плюсах работает:

class A
{
public:
        int m[10];

        int& operator [] (const int i)
        {
                return((m[i]));
        }
};

int main()
{
        A oA;
        oA[2] = 5;
}

 

А вот это - нет.

class A
{
public:
        int* m[10];

        int* operator [] (const int i)
        {
                return((m[i]));
        }
};

int main()
{
        A oA;
        oA[2] = new int;    // error C2106: =: левый операнд должен быть левосторонним значением
}
 
Sergei Vladimirov:

А вот это - нет, и что-то не могу догнать, в чём отличие:

Если добавите ссылку к указателю будет работать. Или двойной указатель.
 
Комбинатор:
Если добавите ссылку к указателю будет работать. Или двойной указатель.
Не понял, какую ссылку, куда?
 
Тьфу ты, млин. Во втором примере operator[] возвращает адрес i-го элемента - естественно, он не может быть изменён. Затупил под вечер.
 

Ой, торможу, второй пример вообще неправильный

Поэтому логично что:

error: invalid initialization of non-const reference of type 'int*&' from an rvalue of type 'int*'

Причина обращения: