Ну дык оператор "запятая". Слева валидное выражение (вызов функции), справа валидное выражение, все нормально. Комо тоже кстати ничего против не имеет.
Даже в MSDN про него кое-что есть:
The comma operator allows grouping two statements where one is expected.
expression , assignment-expression
The comma operator has left-to-right associativity. Two expressions separated by a comma are evaluated left to right. The left operand is always evaluated, and all side effects are completed before the right operand is evaluated.
Commas can be used as separators in some contexts, such as function argument lists. Do not confuse the use of the comma as a separator with its use as an operator; the two uses are completely different.
Consider the expression
e1 , e2
The type and value of the expression are the type and value of e2; the result of evaluating e1 is discarded. The result is an l-value if the right operand is an l-value.
Where the comma is normally used as a separator (for example in actual arguments to functions or aggregate initializers), the comma operator and its operands must be enclosed in parentheses. For example:
func_one( x, y + 2, z );
func_two( (x--, y + 2), z );
In the function call to func_one above, three arguments, separated by commas, are passed: x, y + 2, and z. In the function call to func_two, parentheses force the compiler to interpret the first comma as the sequential-evaluation operator. This function call passes two arguments to func_two. The first argument is the result of the sequential-evaluation operation (x--, y + 2), which has the value and type of the expression y + 2; the second argument is z.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Здравствуйте, ned, Вы писали:
ned>Здравствуйте, rs2, Вы писали:
rs2>>интерестно почему это компилится в VC++?
ned>А что не так?
А все не так! Вы считаете это нормально? У коллеги получился такой код, по запарке не заметил, я с ним согласен ошибиться оч. легко. Поймать ошибку почти нереально — то работает верно, то глючит. Другое дело если б, работало всегда правильно. Пришлось перелопатить груду кода — а это время!
Здравствуйте, rs2, Вы писали:
rs2>интерестно почему это компилится в VC++?
Что конкретно тебя смущает? Существование конструктора у string, принимающего const char*, или operator, ? Посмотри в этом направлении и разрешишь свои вопросы.
>интерестно почему это компилится в VC++?
просто "презумция невиновности" — здесь всё нормально, потому и работает... вот если он не работал, тогда б и стоило вопрошать, почему
Здравствуйте, rs2, Вы писали:
ned>>А что не так?
rs2>А все не так! Вы считаете это нормально? У коллеги получился такой код, по запарке не заметил, я с ним согласен ошибиться оч. легко. Поймать ошибку почти нереально — то работает верно, то глючит. Другое дело если б, работало всегда правильно. Пришлось перелопатить груду кода — а это время!
Нужно успокоиться, и рассказать общественности, в чем заключается ошибка, что значит "то работает верно, то глючит", что понимается под "Другое дело если б, работало всегда правильно".
Здравствуйте, rs2, Вы писали:
rs2>А все не так! Вы считаете это нормально? У коллеги получился такой код, по запарке не заметил, я с ним согласен ошибиться оч. легко. Поймать ошибку почти нереально — то работает верно, то глючит. Другое дело если б, работало всегда правильно. Пришлось перелопатить груду кода — а это время!
А что не работает, то? Где глючит? К чему эта десятка? По-моему, код совершенно корректный.
Здравствуйте, rs2, Вы писали:
rs2>Здравствуйте, ned, Вы писали:
ned>>Здравствуйте, rs2, Вы писали:
rs2>>>интерестно почему это компилится в VC++?
ned>>А что не так?
rs2>А все не так! Вы считаете это нормально? У коллеги получился такой код, по запарке не заметил, я с ним согласен ошибиться оч. легко. Поймать ошибку почти нереально — то работает верно, то глючит. Другое дело если б, работало всегда правильно. Пришлось перелопатить груду кода — а это время!
глюки (на рантайме) могли быть если есть ещё
void TestFunc(string hello, int n)
{
printf("Mdaaa.... %d", n);
}
Здравствуйте, Максим2006, Вы писали:
М>Здравствуйте, rs2, Вы писали:
rs2>>Здравствуйте, ned, Вы писали:
ned>>>Здравствуйте, rs2, Вы писали:
rs2>>>>интерестно почему это компилится в VC++?
ned>>>А что не так?
rs2>>А все не так! Вы считаете это нормально? У коллеги получился такой код, по запарке не заметил, я с ним согласен ошибиться оч. легко. Поймать ошибку почти нереально — то работает верно, то глючит. Другое дело если б, работало всегда правильно. Пришлось перелопатить груду кода — а это время!
М>глюки (на рантайме) могли быть если есть ещё
М>
М>> так?
rs2>Возможно так... дело в том что эта бага не в моем проекте, поэтому меня просто заинтересовал такой синтаксис...
Начнем с того что это вообще не должно компилиться в C++
потому что компилятор выругается что в TestFunc неверное количество параметров
Или это чистый С ?
М>>> так?
rs2>>Возможно так... дело в том что эта бага не в моем проекте, поэтому меня просто заинтересовал такой синтаксис...
КВА>Начнем с того что это вообще не должно компилиться в C++ КВА>потому что компилятор выругается что в TestFunc неверное количество параметров КВА>Или это чистый С ?
Это вторая (перегруженная) функция (первую см. в первом посте), так что всё скомпиляется