Здравствуйте, Аноним, Вы писали:
А>Всем привет
А>Вот набросок: А>class A А>{ А> AArray& operator,(){ return *this; }; А>}
А>func(AArray&);
А>A a,b,c; А>func(a,b,c);
А>Но так работать не будет.
А>Можно конечно вот так: А>func((a,b,c)); А>но некрасиво как-то.
А>Так вот, вопрос соответственно такой: А>можно ли сделать как-нить так, что-бы работала именно func(a,b,c);
что-то, то ли я, то ли лыжи?
что это ?
не проще ли так
struct AArray {
AArray (const A& a1,const A& a2,const A& a3) {
}
};
и шоб imlicit конструктор
и потом у тебя в вызове неименнованный аргумент, как он может быть ссылкой? и главное зачем?
Здравствуйте, Аноним, Вы писали:
А>Так вот, вопрос соответственно такой: А>можно ли сделать как-нить так, что-бы работала именно func(a,b,c);
5.18/2
In contexts where comma is given a special meaning,
[Example: in lists of arguments to functions (5.2.2)
and lists of initializers (8.5) ] the comma operator
as described in clause 5 can appear only in parentheses.
[Example:
f(a, (t=3, t+2), c);
has three arguments, the second of which has the value 5. ]
Здравствуйте, Аноним, Вы писали:
А>Можно конечно вот так: А>func((a,b,c)); А>но некрасиво как-то.
А>Так вот, вопрос соответственно такой: А>можно ли сделать как-нить так, что-бы работала именно func(a,b,c);
по грамматике в синтаксисе вызова функции нет места оператору запятая, только внутри выражения в скобках
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>>Всем привет
А>Вообще господин Мейерс не рекомендует перегружать оператор запятая.
а чем он аргументирует? если не секрет
Здравствуйте, Esperar, Вы писали:
E>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, Аноним, Вы писали:
А>>>Всем привет
А>>Вообще господин Мейерс не рекомендует перегружать оператор запятая. E>а чем он аргументирует? если не секрет
Не знаю чем он аргументирует,
но то что читать и понимать такой код будет сложнее — это очевидно.
Предположим автору топика получится сделать то, что он хочет.
И какая от этого радость?
Представь, ты видишь
func(a,b,c);
но на самом деле это означает не вызов функции, принимающей три параметра,
а вызов функции с одним параметром.
Твоя реакция на такой код?
Здравствуйте, Esperar, Вы писали:
E>а чем он аргументирует? если не секрет
Аргументирует он вот чем:
В стандартном операторе порядок вычисления операндов строго определен — слева направо. Это его свойство используется весьма и весьма широко.
Если же этот оператор перегрузить например так:
class A
{
A& operator +(int;)
A& operator =(int;)
public:
};
A& operator,(A& a1, A& a2){ return a2; }
то возможны очень интересные варианты поведения, поскольку в данном случае порядок вычисления операндов не определен: