оператор присваивания что возвращает ?
От: B0FEE664  
Дата: 23.09.11 13:09
Оценка:
Просматривал http://rsdn.ru/Forum/Info/FAQ.cpp.questions.aspx
Автор: LaptevVV
Дата: 27.04.06

Увидел вопрос:

>31. Какой результат должны возвращать операции с присваиванием?


Что-то я в стандарте ничего про долженствование не нахожу. Какой ответ правильный? Или это вопрос поставлен не правильно?
И каждый день — без права на ошибку...
Re: оператор присваивания что возвращает ?
От: XuMuK Россия  
Дата: 23.09.11 13:10
Оценка:
Здравствуйте, B0FEE664, Вы писали:


BFE>Просматривал http://rsdn.ru/Forum/Info/FAQ.cpp.questions.aspx
Автор: LaptevVV
Дата: 27.04.06

BFE>Увидел вопрос:

>>31. Какой результат должны возвращать операции с присваиванием?


BFE>Что-то я в стандарте ничего про долженствование не нахожу. Какой ответ правильный? Или это вопрос поставлен не правильно?


ссылку на измененный объект.

struct A {
A& operator=(const A&);
};
Re[2]: оператор присваивания что возвращает ?
От: B0FEE664  
Дата: 23.09.11 13:14
Оценка:
Здравствуйте, XuMuK, Вы писали:

BFE>>Что-то я в стандарте ничего про долженствование не нахожу. Какой ответ правильный? Или это вопрос поставлен не правильно?

XMK>ссылку на измененный объект.

Пункт стандарта ?
И каждый день — без права на ошибку...
Re[3]: оператор присваивания что возвращает ?
От: uzhas Ниоткуда  
Дата: 23.09.11 14:18
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Пункт стандарта ?

вы вопрос не поняли
вопрос в том, что когда вы пишете собственный оператор присваивания, то что вы должны вернуть из этого оператора
правильным ответом я бы посчитал "неконстантную ссылку на измененный объект"
это согласуется с поведением встроенного оператора присваивания: http://ideone.com/qU1FN

5.17 Assignment operators [expr.ass]
1. There are several assignment operators, all of which group right-to-left. All require a modifiable lvalue as
their left operand, and the type of an assignment expression is that of its left operand. The result of the
assignment operation is the value stored in the left operand after the assignment has taken place; the result
is an lvalue.
3. If the left operand is not of class type, the expression is implicitly converted (clause 4) to the cv-unqualified
type of the left operand.

4. If the left operand is of class type, the class shall be complete. Assignment to objects of a class is defined
by the copy assignment operator (12.8, 13.5.3).


12.8 Copying class objects
A user-declared copy assignment operator X::operator= is a non-static non-template member function
of class X with exactly one parameter of type X, X&, const X&, volatile X& or const volatile
X&.109) [Note: an overloaded assignment operator must be declared to have only one parameter; see 13.5.3.
] [Note: more than one form of copy assignment operator may be declared for a class. ] [Note: if a class X
only has a copy assignment operator with a parameter of type X&, an expression of type const X cannot be
assigned to an object of type X. [Example:
struct X {
X();
X& operator=(X&);
};
const X cx;
X x;
void f() {
x = cx; // error:
// X::operator=(X&) cannot assign cx into x
}
—end example] —end note]
10 If the class definition does not explicitly declare a copy assignment operator, one is declared implicitly.
The implicitly-declared copy assignment operator for a class X will have the form
X& X::operator=(const X&)


стандарт не обязывает вас возвращать именно это из оператора присваивания. можете void вернуть
Re[4]: оператор присваивания что возвращает ?
От: B0FEE664  
Дата: 23.09.11 15:47
Оценка:
Здравствуйте, uzhas, Вы писали:

U>Здравствуйте, B0FEE664, Вы писали:


BFE>>Пункт стандарта ?

U>вы вопрос не поняли
U>вопрос в том, что когда вы пишете собственный оператор присваивания, то что вы должны вернуть из этого оператора

Не согласен. "про меня" там ничего не написано Вот оригинальный вопрос:
>31. Какой результат должны возвращать операции с присваиванием?

Если бы вопрос звучал так:
— Какой результат могут возвращать операции с присваиванием?
— Какой результат следует возвращать при перегрузке оператора присваивания? Зачем?
— Какой результат принято возвращать при перегрузке оператора присваивания?
тогда понятно, что отвечать. А так —

U>стандарт не обязывает вас возвращать именно это из оператора присваивания. можете void вернуть

спасибо, это я и хотел узнать.
И каждый день — без права на ошибку...
Re[5]: оператор присваивания что возвращает ?
От: rus blood Россия  
Дата: 23.09.11 16:53
Оценка: +1
Здравствуйте, B0FEE664, Вы писали:

U>>стандарт не обязывает вас возвращать именно это из оператора присваивания. можете void вернуть

BFE>спасибо, это я и хотел узнать.

Не сможешь использовать конструкции вида
a=b=c;

Впрочем, а нафиг они нужны?
Имею скафандр — готов путешествовать!
Re[6]: оператор присваивания что возвращает ?
От: Sir-G  
Дата: 23.09.11 18:26
Оценка: +1
Здравствуйте, rus blood, Вы писали:

RB>Впрочем, а нафиг они нужны?

По-моему тоже не нужны, лучше писать каждое присваивание на отдельной строке, понятнее. =)
Re[7]: оператор присваивания что возвращает ?
От: sraider http://dvinogradov.blogspot.com
Дата: 24.09.11 14:05
Оценка:
RB>>Впрочем, а нафиг они нужны?
SG>По-моему тоже не нужны, лучше писать каждое присваивание на отдельной строке, понятнее. =)

много других вариантов использования, например f(a=b)

или c = d ? a=b : ...
или for (...; a=b; ...) / while(a=b)
ну или if (a=b) ...
;)
Re[8]: оператор присваивания что возвращает ?
От: 61a979d1de5f4711  
Дата: 24.09.11 14:19
Оценка: +1 -1
кстати не раз замечал мысль заменять
if (a = call())

на 

a = call()
if (a)

или например

while (i--)
{
}

на 

while (i)
{
    i--;
}

смысл тут везде один избавиться от побочных эффектов где только можно
Вы как считаете ?
Re[8]: оператор присваивания что возвращает ?
От: Sir-G  
Дата: 25.09.11 08:44
Оценка: +1
Здравствуйте, sraider, Вы писали:

S>много других вариантов использования, например f(a=b)

Все эти варианты я тоже не использую, и другим не советую. =)
Чем меньше надо думать надо одним выражением, тем лучше. И не будет побочных эффектов.
Re[9]: оператор присваивания что возвращает ?
От: Sir-G  
Дата: 25.09.11 08:52
Оценка: +1
Здравствуйте, 61a979d1de5f4711, Вы писали:

6>кстати не раз замечал мысль заменять

6>смысл тут везде один избавиться от побочных эффектов где только можно
6>Вы как считаете ?
Я также считаю. Такой код читается проще, и меньше вероятность некосячить.
Но в целом это offtopic. =)
Re[8]: оператор присваивания что возвращает ?
От: B0FEE664  
Дата: 26.09.11 12:20
Оценка: +1 :)
Здравствуйте, sraider, Вы писали:

RB>>>Впрочем, а нафиг они нужны?

SG>>По-моему тоже не нужны, лучше писать каждое присваивание на отдельной строке, понятнее. =)

S>много других вариантов использования, например f(a=b)


S>или c = d ? a=b : ...

S>или for (...; a=b; ...) / while(a=b)
S>ну или if (a=b) ...
S>)

Для таких вариантов использования придётся ещё один оператор добавлять. Ваш Кэп.
И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.