Вопрос по c – Не в состоянии понять причину выхода

3

Я бегу фрагмент кода. Но я не могу понять код и вывод, который он производит.

#include <stdio.h>
int main()  
{ 
  int a, b,c, d;    
  a=3;    
  b=5;    
  c=a,b;    
  d=(a,b);      
  printf("c = %d" ,c);    
  printf("\nd = %d" ,d);    
  return 0;
}  

Выход этой программы:

c=3
d=5

Я не понимаю, как выходной?

Ваш Ответ

3   ответа
9

When you have a comma, the expression is evaluated as the right parameter, that's why d=(a,b); is evaluated as d=b. = has a higher precedence over the comma, so the expression c=a,b; is evaluated as (c=a),b;

c=a,b; выражение, оценивается какbа не, например если ты пишешьd=(c=a,b); ты получаешьc=a А ТАКЖЕd=b;

1

что оператор запятой может быть перегружен в C ++. Таким образом, фактическое поведение может сильно отличаться от ожидаемого.

Например, Boost.Spirit довольно умно использует оператор запятой для реализации инициализаторов списка для таблиц символов. Таким образом, это делает возможным и значимым следующий синтаксис:

keywords = "and", "or", "not", "xor";

, что из-за приоритета оператора код (намеренно!) Идентичен

(((keywords = "and"), "or"), "not"), "xor";

Таким образом, первый вызываемый оператор являетсяwords.operator = (& quot; и & quot;), который возвращает прокси-объект, для которого вызываются оставшиеся операторы:

keywords.operator =("and").operator ,("or").operator ,("not").operator ,("xor");
3

Похожие вопросы