Если присвоение работает в первом случае, по логике оно должно работать и во втором. Потому что в первом случае указателю присваивается тот же rvalue, но оператор потом работает!
Это конечно исключительно мое мнение. Но разобраться охота.
Если присвоение работает в первом случае, по логике оно должно работать и во втором. Потому что в первом случае указателю присваивается тот же rvalue, но оператор потом работает!
Это конечно исключительно мое мнение. Но разобраться охота.
rvalue только и может, что присваиваться левостороннему значению или быть временной константой.
Вот это в плюсах работает:
class A
{
public:
int m[10];
int& operator [] (constint i)
{
return((m[i]));
}
};
int main()
{
A oA;
oA[2] = 5;
}
А вот это - нет.
class A
{
public:
int* m[10];
int* operator [] (constint i)
{
return((m[i]));
}
};
int main()
{
A oA;
oA[2] = newint; // error C2106: =: левый операнд должен быть левосторонним значением
}
error: invalid initialization of non-const reference of type 'int*&' from an rvalue of type 'int*'
Да, я выше уже написал об этом. Я изменил второй пример, но он всё равно не работает. Оператор же возвращает значение, т.е. копию. Это ж надо было так всем троим затупить, а! ))
Комбинатор: Так почему тогда первый кусок примера fxsaber пашет?
А почему не должен-то? У него выражение this[0] возвращает указатель. Вот то же самое в другом виде:
int a;
int* Func(int& i)
{
return(&i);
}
int* p = Func(a); // работает, то же что A* a = this[0]
Func(a) = newint; // не работает, то же, что и this[0] = new int
Объясните
this[0] здесь - rvalue.
Вот это и непонятно.
Если присвоение работает в первом случае, по логике оно должно работать и во втором. Потому что в первом случае указателю присваивается тот же rvalue, но оператор потом работает!
Это конечно исключительно мое мнение. Но разобраться охота.
Вот это и непонятно.
Мне тоже непонятно. )) Upd. Уже понятно.
Если присвоение работает в первом случае, по логике оно должно работать и во втором. Потому что в первом случае указателю присваивается тот же rvalue, но оператор потом работает!
Это конечно исключительно мое мнение. Но разобраться охота.
rvalue только и может, что присваиваться левостороннему значению или быть временной константой.
Вот это в плюсах работает:
А вот это - нет.
А вот это - нет, и что-то не могу догнать, в чём отличие:
Если добавите ссылку к указателю будет работать. Или двойной указатель.
Ой, торможу, второй пример вообще неправильный
Поэтому логично что:
error: invalid initialization of non-const reference of type 'int*&' from an rvalue of type 'int*'
Ой, торможу, второй пример вообще неправильный
Поэтому логично что:
error: invalid initialization of non-const reference of type 'int*&' from an rvalue of type 'int*'
Это ж надо было так всем троим затупить, а! ))
Так почему тогда первый кусок примера fxsaber пашет?
А почему не должен-то? У него выражение this[0] возвращает указатель. Вот то же самое в другом виде: