Что такое выражение и выражение в c ++?

22

Я читал обычно утверждения в c ++, заканчивающиеся на semicon; так что это может помочь объяснить, что должно быть выражением выражения. но что бы вы назвали выражением, представив пример?

В этом случае являются как просто утверждениями, так и выражениями или выражениями выражения?

int x;
x = 0;
    
задан user942451 20.09.2011 в 05:55
источник
  • возможный дубликат выражения Expression Versus –  Jesse Beder 20.09.2011 в 06:13
  • Я не верю, что это дубликат. В этом вопросе конкретно задаются выражения, в то время как другой спрашивает о выражениях против операторов. –  Keith Thompson 20.09.2011 в 06:30
  • Кроме того, это тегированный C #, и это помечено как C ++. Когда вы вникаете в детали синтаксиса, подобные этому, разница еще больше. –  MSalters 20.09.2011 в 10:26

7 ответов

19

выражение - это «последовательность операторов и операндов, которые определяют вычисление» (это определение дано в стандарте C ++). Примерами являются 42 , 2 + 2 , "hello, world" и func("argument") . Назначения - это выражения в C ++; так и вызовы функций.

Я не вижу определения термина «оператор», но в основном это фрагмент кода, который выполняет какое-то действие. Примерами являются составные инструкции (состоящие из нуля или более других операторов, включенных в { ... } ), если операторы, операторы goto, операторы return и выражения выражения . (В C ++, но не в C, объявления классифицируются как утверждения.)

Термины statement и выражение очень точно определяются грамматикой языка.

Оператор выражения - это особый вид оператора. Он состоит из необязательного выражения, за которым следует точка с запятой. Выражение оценивается и любой результат отбрасывается. Обычно это используется, когда оператор имеет побочные эффекты (в противном случае это не так много), но вы можете иметь оператор выражения, в котором выражение не имеет побочных эффектов. Примерами являются:

x = 42; // the expression happens to be an assignment

func("argument");

42; // no side effects, allowed but not useful

; // a null statement

Нулевой оператор является частным случаем. (Я не уверен, почему это так трактуется, на мой взгляд, было бы более разумно, если бы это было своеобразным заявлением. Но так определяет стандарт.)

Обратите внимание, что

return 42;

- это оператор, но это выражение not выражение. Он содержит выражение, но выражение (плюс ; ) не составляет весь оператор.

    
ответ дан Keith Thompson 20.09.2011 в 06:28
источник
  • @MSalters: Спасибо за исправление! –  Keith Thompson 20.09.2011 в 17:01
23

Это выражения (помните math?):

1
6 * 7
a + b * 3
sin(3) + 7
a > b
a ? 1 : 0
func()
mystring + gimmeAString() + std::string("\n")

Ниже перечислены все утверждения:

int x;                            // Also a declaration.
x = 0;                            // Also an assignment.
if(expr) { /*...*/ }              // This is why it's called an "if-statement".
for(expr; expr; expr) { /*...*/ } // For-loop.

Заявление обычно состоит из выражения:

if(a > b)           // a > b is an expr.
    while(true)     // true is an expr.
        func();     // func() is an expr.
    
ответ дан Mateen Ulhaq 20.09.2011 в 06:00
источник
6

Чтобы понять, что является выражением выражения, вы должны сначала знать, что такое выражение и что является выражением.

выражение на языке программирования представляет собой комбинацию одного или нескольких явных значений, констант, переменных, операторов и функций , которые язык программирования интерпретирует (в соответствии с его особые правила приоритета и ассоциации) и вычисляет, чтобы произвести («вернуть», в среде с сохранением состояния) другое значение. Этот процесс, как и для математических выражений, называется оценкой .

Источник: Ссылка

Другими словами, выражения являются своего рода элементами данных. Они могут иметь одиночные или множественные объекты, такие как константы и переменные. Эти объекты могут быть связаны или связаны друг с другом операторами. Выражения могут иметь или не иметь побочные эффекты , поскольку они оценивают что-то посредством вычисления, которое изменяет состояние. Например, все числа, которые выглядят как математические формулы и вычисления, назначения, вызовы функций , логические оценки, строки и операции с строкой, считаются выраженными.

вызовы функций . Согласно MSDN, вызовы функций считаются выражениями. Вызов функции - это выражение, которое передает управление и аргументы (если есть) в функцию и имеет форму: expression (expression-list opt) , который вызывается оператором функции ( ) .

источник: Ссылка

Некоторые примеры выражений:

46
18 * 3 + 22 / 2
a = 4
b = a + 3
c = b * -2
abs(c)
b >= c
c
"a string"
str = "some string"
strcat(str, " some thing else")
str2 = "some string" + " some other string" // in C++11 using string library

Выражения - это фрагменты программы, которые выполняются последовательно и заставляют компьютер выполнять определенные действия. Некоторые типы операторов C ++:

  • выражения выражения;
  • составные утверждения;
  • утверждения выбора;
  • итерационные утверждения;
  • инструкции перехода;
  • заявления о декларации;
  • блок try;
  • атомные и синхронизированные блоки (TM TS).

Источник: Ссылка

  

Я обычно читал утверждения в c ++ с помощью semicon;

Да обычно ! Но не всегда. Рассмотрим следующий фрагмент кода, который представляет собой составной оператор, но не заканчивается точкой с запятой, а заключен между двумя фигурными фигурными скобками:

{   // begining of a compound statement
    int x;    // A declaration statement
    int y;
    int z;
    x = 2;    // x = 2 is an expression, thus x = 2; with the trailing semicolon is an expression statement
    y = 2 * x + 5;
    if(y == 9) {    // A control statement
        z = 52;
    } else {        // A branching statement of a control statement
        z = 0;
    }
 }    // end of a compound statement

В настоящее время, как вы могли догадаться, оператор выражения - это любой оператор, который имеет выражение, за которым следует точка с запятой. Согласно MSDN оператор выражения - это оператор, который вызывает выражение для оценки. Передача управления или итерации не происходит в результате выражения выражения.

Источник: Ссылка

Некоторые примеры операторов выражения:

x = 4;
y = x * x + 10;
radius = 5;
pi = 3.141593;
circumference = 2. * pi * radius;
area = pi * radius * radius;

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

printf("The control is passed to the printf function");
y = pow(x, 2);

побочные эффекты : побочный эффект относится к модификации состояния. Например, изменение значения переменной, запись некоторых данных на диск, показывающих меню в пользовательском интерфейсе и т. Д.

Источник: Ссылка

Обратите внимание, что выражениям выражения не нужно иметь побочные эффекты. То есть им не нужно изменять или изменять какое-либо состояние. Например, если мы рассматриваем поток управления программой как состояние, которое можно было бы изменить, то следующие выражения не будет иметь побочных эффектов над потоком управления программой:

a = 8;
b = 10 + a;
k++;

В следующем выражении выражение будет иметь побочный эффект, поскольку он передаст поток управления функции sqrt (), изменив состояние:

d = sqrt(a);    // The control flow is passed to sqrt() function

Если мы рассмотрим значение переменной как состояния, а также ее модификация будет побочным эффектом, все выражения выше имеют побочные эффекты, потому что все они изменяют состояние. Выражение выражения, которое не имеет побочного эффекта, не очень полезно. Рассмотрим следующие выражения:

x = 7;  // This expression statement sets the value of x to 7
x;      // This expression statement is evaluated to 7 and does nothing useful 

В приведенном выше примере x = 7; - полезный оператор выражения для нас. Он устанавливает значение x на 7 на = оператора присваивания. Но x; оценивается до 7 и не делает ничего полезного.

    
ответ дан ilgaar 03.06.2016 в 15:33
источник
3

В соответствии с языком программирования C ++ по Bjarne Stroustrup Special (3rd) Edition утверждение представляет собой в основном любое объявление, вызов функции, назначение или условное. Хотя, если вы посмотрите на грамматику, это намного сложнее. Выражение простым языком является любой математической или логической операцией.

Ссылки на Википедию, которые одобрены в его ответе, также могут помочь.

    
ответ дан Austin Henley 20.09.2011 в 06:06
источник
1

По-моему,

a statement * указывает * назначение блока кода. т. е. мы говорим, что этот блок кода if(){} является if-statement, или этот x=42; является выражением. Таким образом, код, такой как 42; , не содержит purporse, поэтому это * не * оператор.

и

a выражение представляет собой любую юридическую комбинацию символов, которая представляет значение (кредит Webopedia ); он объединяет переменные и константы для создания новых значений (см. главу 2 на языке программирования C). Поэтому он также имеет математическую коннотацию. Например, число 42 в x=42; является выражением ( x=42; не является выражением, а скорее выражением выражения), или func(x) является выражением, потому что оно будет оценивать что-то. Наоборот, int x; не является выражением, поскольку оно не представляет никакого значения.     

ответ дан donkey 10.01.2018 в 11:13
источник
0

Я думаю, что этот отрывок из технической книги наиболее полезен и понятен ,

Прочитайте абзацы до начала 1.4.2 утверждений будет достаточно полезно.

    
ответ дан Rick 23.03.2018 в 04:22
источник
-3

Выражение является частью инструкции, или самой инструкции.

int x; - это выражение и выражение.

Смотрите это: Ссылка

Ссылка

    
ответ дан Coffee 20.09.2011 в 05:57
источник
  • Неверно - это заявление и декларация. Поскольку объявление никогда не является выражением выражения и наоборот, из этого следует, что это не выражение. Кроме того, выражение (само по себе) никогда не является утверждением и наоборот, поэтому ничто не является одновременно. –  MSalters 20.09.2011 в 10:34
  • Я согласен с @MSalters. Выражения не являются заявлениями: 42; может быть решением всего, но это еще не утверждение. –  RecursiveExceptionException 26.07.2017 в 20:55
  • @itzJanuary: Плохой пример. Это на самом деле утверждение, а не выражение. 42 - выражение, а не утверждение. Точка с запятой имеет большое значение. –  MSalters 26.07.2017 в 22:53
  • @MSalters 42; не является действительным заявлением на любом языке, который я знаю. –  RecursiveExceptionException 26.07.2017 в 23:07
  • @itzJanuary: Это может быть очень хорошо - я не знаю, с какими языками вы знакомы. Однако это вопрос на C ++, а в C ++ это действительный оператор. См. Также ответ Кейта Томпсона, в котором используется тот же самый пример. –  MSalters 26.07.2017 в 23:11