Используете ли вы запятую?
От: kurchatov  
Дата: 08.03.15 15:04
Оценка: :)
оператор ,

Как, где, когда?

Отвечайте.

Миллионы строк кода сейчас зависят от вашего ответа.
Re: Используете ли вы запятую?
От: ArtDenis Россия  
Дата: 08.03.15 15:26
Оценка: 1 (1)
Здравствуйте, kurchatov, Вы писали:

K>оператор ,


K>Как, где, когда?


Перегружаю, чтобы можно было использовать в конструкциях типа
bla_bla1(some_args)
[
    item1(another_args),
    item2(another_args_again),
    
    bla_bla2(args)
    [
        item3(...),
        item4(...),
        ...
    ],
    item5(...),
    ...
];

это используется чтобы можно было легко при помощи синтаксиса плюсов выразить AST из какой-либо нужной области.
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Отредактировано 09.03.2015 13:36 ArtDenis . Предыдущая версия .
Re: Используете ли вы запятую?
От: Abyx Россия  
Дата: 08.03.15 15:35
Оценка:
Здравствуйте, kurchatov, Вы писали:

K>оператор ,


K>Как, где, когда?


использую везде где надо добавить сайд-эффект к выражению.
кажется что это настолько тривиально, что непонятно зачем Вы спрашиваете %)
In Zen We Trust
Re[2]: Используете ли вы запятую?
От: kurchatov  
Дата: 08.03.15 15:38
Оценка:
Здравствуйте, Abyx, Вы писали:

A>кажется что это настолько тривиально, что непонятно зачем Вы спрашиваете %)


я его вообще ни разу не использовал в своих классах.
Re[2]: Используете ли вы запятую?
От: kurchatov  
Дата: 08.03.15 15:45
Оценка:
Здравствуйте, Abyx, Вы писали:

или вы имеете в виду do_one_shit(),do_another_shit(); ?

Я думаю, что это отвратительный стиль
Re: Используете ли вы запятую?
От: VTT http://vtt.to
Дата: 08.03.15 15:52
Оценка:
Здравствуйте, kurchatov, Вы писали:

K>оператор ,


K>Как, где, когда?


K>Отвечайте.


K>Миллионы строк кода сейчас зависят от вашего ответа.


Перегруженный оператор , может быть полезен для выполнения одинакового действия над пачкой несвязанных объектов (т.е. не лежащих в одном контейнере). Например добавление в конец вектора:
void
SomeMethod(t_Item const & item1, t_Item const & item2)
{
    t_Item item3;
    ::std::vector< t_Item > items;
    (t_BackInserter(items)), item1, item2, t_Item(), item2, item3, Make_Item();
}

Или исполнение пачки команд
t_Command start("start");
t_Command wait("wait", 2);
t_Command finish("finish")
(t_CommandExecuter()), start, t_Command("do something"), wait, t_Command("do something else"), wait, finish;

Вместо многократного дергания метода push_back() в первом случае и какого-нибудь execute() во втором, можно просто написать перечень элементов.
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Отредактировано 08.03.2015 15:58 VTT . Предыдущая версия .
Re: Используете ли вы запятую?
От: Alexander G Украина  
Дата: 08.03.15 16:02
Оценка:
Здравствуйте, kurchatov, Вы писали:

K>оператор ,


K>Как, где, когда?


K>Отвечайте.


Только в отладочных целях, когда надо быстро изменить результат выражения, что-то проверяя.

Например, замена "return ComputeSomething();" на "return ComputeSomething(), 0;"

Идея в том, чтобы сохранить все побочки ComputeSomething(), и чтобы легко вернуть как было, не обращаясь к системе контроля версий.
Русский военный корабль идёт ко дну!
Re[3]: Используете ли вы запятую?
От: Abyx Россия  
Дата: 08.03.15 18:33
Оценка: +1
Здравствуйте, kurchatov, Вы писали:

K>или вы имеете в виду do_one_shit(),do_another_shit(); ?


я же написал
> где надо добавить сайд-эффект к выражению.
т.е. есть контекст в котором надо написать выражение, и Вы хотите добавить туда сайд-эффект.
например
struct X {
  bool _ = (f(), false);
};

или в С++03
struct X {
  static bool _;
};
bool X::_ = (f(), false);


или те же самые вариадики
(void)std::initializer_list<int>{(f(t), 0)...};


или в COM любят использовать запятую с return
HRESULT f(BOOL* b) { return *b = FALSE, E_NOTIMPL; }


или для SFINAE
decltype(f(), g(), 0)


или в тернарном операторе.

или еще много где.
In Zen We Trust
Отредактировано 08.03.2015 20:31 Abyx . Предыдущая версия .
Re: Используете ли вы запятую?
От: uzhas Ниоткуда  
Дата: 08.03.15 20:43
Оценка:
Здравствуйте, kurchatov, Вы писали:

K>оператор ,


K>Как, где, когда?


никак, нигде и никогда
Re: Используете ли вы запятую?
От: Tilir Россия http://tilir.livejournal.com
Дата: 08.03.15 22:00
Оценка: +7
Здравствуйте, kurchatov, Вы писали:

K>оператор ,

K>Как, где, когда?

Довольно часто встречается там, где нужно выразить двойной индекс в цикле:

int i, x;
for (i = istart, x = xstart; condition(i, x); i+=istep, x+=xstep)


Идея в том, что i и x -- равноправные индексы, просто бегут разным шагом или вообще навстречу друг другу. Без оператора запятая вы должны сделать один из них "главным" в шапке цикла и один подчиненным в теле, что может сказаться на читаемости.
Re: Используете ли вы запятую?
От: andrey.desman  
Дата: 08.03.15 22:21
Оценка:
Здравствуйте, kurchatov, Вы писали:

K>оператор ,


K>Как, где, когда?


return (scoped_lock(lock)), value;
Re: Используете ли вы запятую?
От: Vain Россия google.ru
Дата: 09.03.15 02:35
Оценка:
Здравствуйте, kurchatov, Вы писали:

K>оператор ,

K>Как, где, когда?
K>Отвечайте.
K>Миллионы строк кода сейчас зависят от вашего ответа.
а что если не ответим, переложишь ответственность на рсдн?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re: Используете ли вы запятую?
От: B0FEE664  
Дата: 09.03.15 12:24
Оценка: :)
Здравствуйте, kurchatov, Вы писали:

K>оператор ,

K>Как, где, когда?

Запятую использую так:
for(... it = arr.begin(), itEnd = arr.end(); it != itEnd; ++it) { ... }


Оператор ',' не использовал ни разу.
И каждый день — без права на ошибку...
Re: Используете ли вы запятую?
От: Kernighan СССР  
Дата: 09.03.15 21:48
Оценка: -1 :))) :)
Здравствуйте, kurchatov, Вы писали:

Нигде и никогда.
Так же как и перегрузку операторов.
Потому что это очень лёгкий способ сделать код нечитаемым в принципе.
Re: Используете ли вы запятую?
От: night beast СССР  
Дата: 10.03.15 09:36
Оценка:
Здравствуйте, kurchatov, Вы писали:

K>оператор ,

K>Как, где, когда?
K>Отвечайте.
K>Миллионы строк кода сейчас зависят от вашего ответа.

foo[ _1, _2 ]

Re: Используете ли вы запятую?
От: lxa http://aliakseis.livejournal.com
Дата: 10.03.15 09:56
Оценка: 23 (2) +1
Здравствуйте, kurchatov, Вы писали:

K>оператор ,


K>Как, где, когда?


Ка-то так:
template<typename T>
class CommaSetter
{
public:
 CommaSetter(_variant_t& v) : m_v ( v ) {}
 template<typename V> void operator , (const V& v)
 {
  m_v = v;
 }
private:
 _variant_t& m_v;
};

template<>
class CommaSetter<void>
{
public:
 CommaSetter(_variant_t&) {}
};


template <typename C, typename R>
class CInvokeHandler0
{
 typedef R(C::*FUNC)();
public:
 CInvokeHandler0(FUNC func) : m_func(func) {}
 void Invoke(C* pObj, _variant_t& rRes, DISPPARAMS* pDispParams)
 {
  if (pDispParams->cArgs != 0)
  {
   _com_issue_error(DISP_E_BADPARAMCOUNT);
  }
  CommaSetter<R>(rRes), (pObj->*m_func)();
 }
private:
 FUNC m_func;
};

Хотя наверняка можно сделать лучше.
Re[2]: Используете ли вы запятую?
От: tdiff  
Дата: 11.03.15 12:37
Оценка:
Здравствуйте, lxa, Вы писали:

lxa>Ка-то так:

lxa>
lxa>template<typename T>
lxa>class CommaSetter
lxa>{
lxa>public:
lxa> CommaSetter(_variant_t& v) : m_v ( v ) {}
lxa> template<typename V> void operator , (const V& v) // А какой смысл именно в запятой здесь? operator << было бы логичней, нет?
lxa> {
lxa>  m_v = v;
lxa> }
lxa>private:
lxa> _variant_t& m_v;
lxa>};

lxa>
Отредактировано 11.03.2015 12:38 tdiff . Предыдущая версия .
Re: Используете ли вы запятую?
От: Figaro Россия  
Дата: 14.03.15 06:37
Оценка: :)))
В комментариях...
avalon/1.0.442
Re[3]: Используете ли вы запятую?
От: rus blood Россия  
Дата: 14.03.15 10:31
Оценка:
Здравствуйте, tdiff, Вы писали:

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


lxa>>
lxa>> template<typename V> void operator , (const V& v) // А какой смысл именно в запятой здесь? operator << было бы логичней, нет?
lxa>>


А не operator = был бы логичнее?
Как то так...
rRes = (pObj->*m_func)();


Или это слишком скучно?
Имею скафандр — готов путешествовать!
Re: Используете ли вы запятую?
От: 11molniev  
Дата: 14.03.15 11:39
Оценка: +3
Здравствуйте, kurchatov, Вы писали:

K>оператор ,


K>Как, где, когда?

Иногда в заголовке for ( , ; ; ) и исключительно редко, когда нужно над двумя переменными выполнить одно логически связанное действие.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.