Описание тега comma-operator

Оператор запятая - это оператор, который оценивает свою левую часть, отбрасывает результат, а затем вычисляет правую часть. Это используется на нескольких языках, включая C, C++ и JavaScript.
2 ответа

Почему расширение пакета внутри неоцененного операнда приводит к последнему элементу?

Я могу сделать это внутри decltype(): auto g() -> decltype(1, "", true, new int); Но не это: template <class... Args> auto g(Args&&... args) -> decltype(args...); Сбой, потому что расширение пакета появляется внутри decltype() но…
2 ответа

Почему этот код компилируется в VS? ("лишняя" запятая)

Строка ниже находится внутри цикла for. Если метод терпит неудачу, он должен сломаться. CATEGORY_1 - это перечисление. Я добавил это перечисление в качестве нового параметра в метод AddToList со значением по умолчанию. Если вы посмотрите внимательно…
12 апр '11 в 01:38
4 ответа

Запятая против оператора && в циклах и if-else

Рассмотрим код: if(x = a/b, a%b) printf("do this"); else printf("do that"); Теперь, если я заменю if заявление if(x = a/b && a % b), Тогда это работает также. Поэтому я хочу знать, что замена запятой на && оператор и наоборот работае…
30 апр '14 в 07:26
3 ответа

Запятая возвращает первое значение вместо второго в списке аргументов?

MDN утверждает, что: Оператор запятой оценивает оба своих операнда (слева направо) и возвращает значение второго операнда. Тем не менее, когда я попытался запустить <script> alert(1, 2); </script>, он показывает "1" вместо "2". Я что-то…
07 апр '11 в 11:54
1 ответ

PHP 7 облегчает замену оператора запятой?

До сих пор я узнал, что в PHP отсутствует оператор запятой (меня не интересуют мнения, хорошо это или плохо). Так как я попадаю в схему таких выражений: ($tmp = bar(), foo($tmp), $tmp) выполнять вычисления и кэшировать вывод использовать кэшированно…
22 дек '15 в 09:52
1 ответ

Что случилось со static_cast с несколькими аргументами?

Может кто-нибудь сказать мне, что это приведение имеет для эффекта (помимо установки happyNumber 1337), если таковые вообще имеются, и если это не имеет никакого другого эффекта, почему я могу написать код, подобный этому??? Это ошибка компилятора и…
3 ответа

Запятая оператор и пустое выражение

Я наткнулся на этот фрагмент кода 1 int return_printChar1() { // code // oops! no return statement } int return_printChar2() { // code return printf("Return"); } int main() { int i; // some more code i = return_printChar2(); if((return_printChar1(),…
23 мар '11 в 05:01
5 ответов

Когда все оператор запятой не действует как оператор запятой?

Если вы видите этот код, class A{ public: A(int a):var(a){} int var; }; int f(A obj) { return obj.var; } int main() { //std::cout<<f(23); // output: 23 std::cout<<f(23, 23); // error: too many arguments to function 'int f(A)' return 0; }…
27 июн '10 в 18:20
2 ответа

Почему double x = 0,1; не компилировать?

double x = 0,1; не компилируется (примеряет MSVC9.0). Ошибка C2059 syntax error : 'constant' Я понимаю, что вместо точки есть запятая, но не следует ли интерпретировать приведенную выше строку следующим образом? double x = (0,1); //which is double x…
30 окт '12 в 19:20
2 ответа

Должен ли оператор запятой быть левоассоциативным?

Согласно этой таблице приоритетов оператор запятой является левоассоциативным. То есть, a, b, c анализируется как (a, b), c, Это необходимость? не было бы a, (b, c) есть точно такое же поведение?
2 ответа

Как оператор запятой используется здесь?

Возможный дубликат: C++ оператор запятой Использование оператора C запятой Я не новичок в C++, но это первый раз, когда я вижу следующий код: int a=0; int b=(a=2,a+1); Это код C++. Можете ли вы сказать мне, что здесь происходит? А как переменная b п…
10 окт '12 в 16:45
5 ответов

Что делает это динамическое распределение?

Сегодня я узнал, что вы можете написать такой код на C++ и скомпилировать его: int* ptr = new int(5, 6); Какова цель этого? Я знаю, конечно, динамический new int(5) вещь, но здесь я потерялся. Есть какие-нибудь подсказки?
2 ответа

Запятые в цикле

Почему следующая строка выдает ошибки? for(int i = 0, int pos = 0, int next_pos = 0; i < 3; i++, pos = next_pos + 1) { // … } error: expected unqualified-id before ‘int’ error: ‘pos’ was not declared in this scope error: ‘next_pos’ was not declar…
01 авг '10 в 22:18
1 ответ

C - оператор while для инициализатора цикла

Почему я не могу написать что-то подобное? int i, size; int *arr; ... for(i = size - 1, while(arr[i] == 0) i--; i >= 0; i--) { ... }
23 мар '16 в 17:01
3 ответа

Понять оператор запятой

int main() { int a = (1,2,3); int b = (++a, ++a, ++a); int c= (b++, b++, b++); printf("%d %d %d", a,b,c); } Я новичок в программировании. Я не понимаю, как эта программа показывает мне вывод 6 9 8,
08 дек '15 в 11:23
1 ответ

Как ((a++,b)) работает?

В приведенном выше блоке кода, я пытаюсь понять, как строка return reverse((i++, i)) работает. #include <stdio.h> void reverse(int i); int main() { reverse(1); } void reverse(int i) { if (i > 5) return ; printf("%d ", i); // return reverse(…
23 июн '15 в 06:55
2 ответа

Разрешен ли оператор запятой в выражении константы в C++11?

В процессе ответа на этот вопрос о SO для C++11 я понял, что в C++03 (как и в C) использование оператора запятой явно запрещено в константном выражении. Пункт 5.19/1 стандарта C++ 03 по константным выражениям гласит: [...] В частности, кроме выражен…
1 ответ

Почему я должен заключить в скобки инициализирующее выражение, которое является выражением запятой?

Разбирая проблему, я имею в виду ее сущность, я могу инициализировать переменную как int, выполнив вначале лямбду бездействия в выражении через запятую, например так: int main(){ auto x = ( []{}(), 10 ); // same effect as auto x = 10; } Но если я не…
04 фев '16 в 17:28
1 ответ

Действительно ли перегрузка оператора запятой * действительно * влияет на порядок вычисления его операндов?

Оператор запятой гарантирует порядок оценки слева направо. [n3290: 5.18/1]: Операторы запятой группируются слева направо. expression: assignment-expression expression , assignment-expression Пара выражений, разделенных запятой, оценивается слева нап…
1 ответ

Тернарный и запятый оператор

int a,b; a = 1 ? 1,2 : 3,4; // a = 2 b = 0 ? 1,2 : 3,4; // b = 3 Оператор запятой всегда возвращает правую часть запятой, но если мы присваиваем переменную, он возвращает влево, кроме случая, когда мы используем (). Так как, черт возьми, первое выра…
01 ноя '16 в 21:56