Re: Используете ли вы запятую?
Здравствуйте, kurchatov, Вы писали:
K>оператор ,
K>Как, где, когда?
Довольно часто встречается там, где нужно выразить двойной индекс в цикле:
int i, x;
for (i = istart, x = xstart; condition(i, x); i+=istep, x+=xstep)
Идея в том, что i и x -- равноправные индексы, просто бегут разным шагом или вообще навстречу друг другу. Без оператора запятая вы должны сделать один из них "главным" в шапке цикла и один подчиненным в теле, что может сказаться на читаемости.
Re: Используете ли вы запятую?
Здравствуйте, kurchatov, Вы писали:
Нигде и никогда.
Так же как и перегрузку операторов.
Потому что это очень лёгкий способ сделать код нечитаемым в принципе.
Re: Используете ли вы запятую?
Здравствуйте, 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: Используете ли вы запятую?
От:
Figaro
Дата: 14.03.15 06:37
Оценка:
Re: Используете ли вы запятую?
Здравствуйте, kurchatov, Вы писали:
K>оператор ,
K>Как, где, когда?
Иногда в заголовке for ( , ; ; ) и исключительно редко, когда нужно над двумя переменными выполнить одно логически связанное действие.
Re[2]: VS bug: new int(1,2,"wtf")
Здравствуйте, kgrach, Вы писали:
K>короче везде
Не заметил у Вас использование оператора "," за пределами п. 6.
Re: Используете ли вы запятую?
Здравствуйте, kurchatov, Вы писали:
K>оператор ,
K>Как, где, когда?
Перегружаю, чтобы можно было использовать в конструкциях типа
bla_bla1(some_args)
[
item1(another_args),
item2(another_args_again),
bla_bla2(args)
[
item3(...),
item4(...),
...
],
item5(...),
...
];
это используется чтобы можно было легко при помощи синтаксиса плюсов выразить AST из какой-либо нужной области.
Используете ли вы запятую?
оператор ,
Как, где, когда?
Отвечайте.
Миллионы строк кода сейчас зависят от вашего ответа.
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
Re: Используете ли вы запятую?
От:
B0FEE664
Дата: 09.03.15 12:24
Оценка:
Здравствуйте, kurchatov, Вы писали:
K>оператор ,
K>Как, где, когда?
Запятую использую так:
for (... it = arr.begin(), itEnd = arr.end(); it != itEnd; ++it) { ... }
Оператор ',' не использовал ни разу.
И каждый день — без права на ошибку...
Re: Используете ли вы запятую?
От:
kgrach
Дата: 14.03.15 17:29
Оценка:
1) int a, b, c;
2) void f(int a, int b, int c);
3) f(a, b, c);
4) template<typename T, typename U> ....
5) std::map<int, int>
6) for(a = 0, b = 125; 1; a++)
короче везде
Re: Используете ли вы запятую?
От:
Abyx
Дата: 08.03.15 15:35
Оценка:
Здравствуйте, kurchatov, Вы писали:
K>оператор ,
K>Как, где, когда?
использую везде где надо добавить сайд-эффект к выражению.
кажется что это настолько тривиально, что непонятно зачем Вы спрашиваете %)
In Zen We Trust
Re[2]: Используете ли вы запятую?
Здравствуйте, Abyx, Вы писали:
A>кажется что это настолько тривиально, что непонятно зачем Вы спрашиваете %)
я его вообще ни разу не использовал в своих классах.
Re[2]: Используете ли вы запятую?
Здравствуйте, Abyx, Вы писали:
или вы имеете в виду do_one_shit(),do_another_shit(); ?
Я думаю, что это отвратительный стиль
Re: Используете ли вы запятую?
Здравствуйте, 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() во втором, можно просто написать перечень элементов.
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Re: Используете ли вы запятую?
Здравствуйте, kurchatov, Вы писали:
K>оператор ,
K>Как, где, когда?
K>Отвечайте.
Только в отладочных целях, когда надо быстро изменить результат выражения, что-то проверяя.
Например, замена "return ComputeSomething();" на "return ComputeSomething(), 0;"
Идея в том, чтобы сохранить все побочки ComputeSomething(), и чтобы легко вернуть как было, не обращаясь к системе контроля версий.
Русский военный корабль идёт ко дну!
Re: Используете ли вы запятую?
От:
uzhas
Дата: 08.03.15 20:43
Оценка:
Здравствуйте, kurchatov, Вы писали:
K>оператор ,
K>Как, где, когда?
никак, нигде и никогда
Re: Используете ли вы запятую?
Здравствуйте, 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: Используете ли вы запятую?
Здравствуйте, kurchatov, Вы писали:
K>оператор ,
K>Как, где, когда?
K>Отвечайте.
K>Миллионы строк кода сейчас зависят от вашего ответа.
foo[ _1, _2 ]
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>
Re[3]: Используете ли вы запятую?
Здравствуйте, tdiff, Вы писали:
T>Здравствуйте, lxa, Вы писали:
lxa>>lxa>> template <typename V> void operator , (const V& v) // А какой смысл именно в запятой здесь? operator << было бы логичней, нет?
lxa>>
А не operator = был бы логичнее?
Как то так...
rRes = (pObj->*m_func)();
Или это слишком скучно?
Имею скафандр — готов путешествовать!
Re: Используете ли вы запятую?
Здравствуйте, kurchatov, Вы писали:
K>оператор ,
K>Как, где, когда?
K>Отвечайте.
K>Миллионы строк кода сейчас зависят от вашего ответа.
видел и использовал пару раз, так:
delete pPointer, pPointer=0;
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[4]: Используете ли вы запятую?
От:
tdiff
Дата: 14.03.15 16:11
Оценка:
Здравствуйте, rus blood, Вы писали:
RB>А не operator = был бы логичнее?
RB>Как то так...
RB>RB>rRes = (pObj->*m_func)();
RB>
RB>Или это слишком скучно?
Я так понял, все это сделано на случай R == void.
Re[2]: Используете ли вы запятую?
Здравствуйте, kgrach, Вы писали:
K>6) for(a = 0, b = 125; 1; a++)
только здесь оператор запятая
социализм или варварство
Re[2]: Используете ли вы запятую?
От:
AlexGin
Дата: 17.04.15 11:19
Оценка:
Здравствуйте, Alexander G, Вы писали:
AG>Только в отладочных целях, когда надо быстро изменить результат выражения, что-то проверяя.
AG>Например, замена "return ComputeSomething();" на "return ComputeSomething(), 0; "
AG>Идея в том, чтобы сохранить все побочки ComputeSomething(), и чтобы легко вернуть как было, не обращаясь к системе контроля версий.
И каким образом компилятор не обругает нас по выделенному?
ИМХО это явный error!
Re[3]: Используете ли вы запятую?
От:
_DAle_
Дата: 17.04.15 11:25
Оценка:
Здравствуйте, AlexGin, Вы писали:
AG>И каким образом компилятор не обругает нас по выделенному?
AG>ИМХО это явный error!
А что здесь не так?
Re[4]: Используете ли вы запятую?
От:
AlexGin
Дата: 17.04.15 15:51
Оценка:
Здравствуйте, _DAle_, Вы писали:
_DA>Здравствуйте, AlexGin, Вы писали:
AG>>И каким образом компилятор не обругает нас по выделенному?
AG>>ИМХО это явный error!
_DA>А что здесь не так?
Собственно говоря — это нормально проходит! Проверил на MSVC.
Буду иметь в виду
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить