我想详细了解C++;。请举一个具体的例子来解释这一点 现在我正在学习C++程序设计。我不理解表达式、定义、声明和定义之间的区别

我想详细了解C++;。请举一个具体的例子来解释这一点 现在我正在学习C++程序设计。我不理解表达式、定义、声明和定义之间的区别,c++,expression,computer-science,declaration,definition,C++,Expression,Computer Science,Declaration,Definition,正如维基百科所说 在“声明(计算机科学)”中 在大多数语言中,语句与表达式形成对比,语句不返回结果,仅因其副作用而执行,而表达式总是返回结果,通常根本没有副作用 在“表达式(计算机科学)”页面中 在许多编程语言中,函数以及包含函数的表达式可能会产生副作用。具有副作用的表达式通常不具有引用透明的属性。在许多语言(例如C++)中,表达式可能以分号(;)结尾,以将表达式转换为表达式语句。这要求实现仅计算表达式的副作用,并忽略表达式的结果(例如“x+1;”),除非它是导致副作用的表达式语句的一部分(例如

正如维基百科所说

在“声明(计算机科学)”中

在大多数语言中,语句与表达式形成对比,语句不返回结果,仅因其副作用而执行,而表达式总是返回结果,通常根本没有副作用

在“表达式(计算机科学)”页面中

在许多编程语言中,函数以及包含函数的表达式可能会产生副作用。具有副作用的表达式通常不具有引用透明的属性。在许多语言(例如C++)中,表达式可能以分号(;)结尾,以将表达式转换为表达式语句。这要求实现仅计算表达式的副作用,并忽略表达式的结果(例如“x+1;”),除非它是导致副作用的表达式语句的一部分(例如“y=x+1;”或“func1(func2());”)。 警告

具体来说,“副作用”和“结果”在这里是什么意思


请帮帮我,C++怪胎! 声明通知编译器给定的名称已经已知。但是,未分配对象的内存。我们不能引用一个对象,不能给它赋值,因为它还不存在

extern varType varName;
定义为给定变量保留内存空间。对于哪个变量,我听到你问。没错-必须在某个地方声明变量,以便知道其名称和类型。好吧,其中有一个陷阱,因为每个定义同时是一个声明(但不是相反)

表达式由运算符、常量和变量组成,它们根据语言规则排列。它还可以包含返回值的函数调用

x = a+(b*c);
bool ifTrue = a>b;

您应该阅读有关表达式的更多信息

声明通知编译器给定的名称已经已知。但是,未分配对象的内存。我们不能引用一个对象,不能给它赋值,因为它还不存在

extern varType varName;
定义为给定变量保留内存空间。对于哪个变量,我听到你问。没错-必须在某个地方声明变量,以便知道其名称和类型。好吧,其中有一个陷阱,因为每个定义同时是一个声明(但不是相反)

表达式由运算符、常量和变量组成,它们根据语言规则排列。它还可以包含返回值的函数调用

x = a+(b*c);
bool ifTrue = a>b;
你应该多读一些关于表达式的知识

具体来说,“副作用”和“结果”在这里是什么意思

表达式并没有副作用,从源代码中删除它不会改变程序语义

int main(void) {
   int x = 1, y = 2, z = 0;
   // x+y expression calculates sum and ignores resulting answer 
   // NO SIDE EFFECTS, can be removed
   x+y; 
   // x+y expression calculates sum, but then 15 is assigned to z as a result 
   // SIDE EFFECT is that removing given expression breaks program syntax - can't be removed 
   z = (x+y, 15);
}
编辑

顺便说一句,记住并非所有的表达式语句都有副作用。例如
x=x
在技术上等同于
-在程序集级别编译为NOP或被GCC优化器跳过的空语句。因此,这些类型的表达式语句没有副作用,可以安全地从程序中删除。但这并不意味着可以在不更改程序逻辑的情况下删除每个空语句。例如,在这段代码中:
for(i=0;i<10;i++)

在这里,NOP是在每个CPU周期中执行的,所以如果您删除它,程序语义将发生根本性的变化

具体来说,“副作用”和“结果”在这里是什么意思

表达式并没有副作用,从源代码中删除它不会改变程序语义

int main(void) {
   int x = 1, y = 2, z = 0;
   // x+y expression calculates sum and ignores resulting answer 
   // NO SIDE EFFECTS, can be removed
   x+y; 
   // x+y expression calculates sum, but then 15 is assigned to z as a result 
   // SIDE EFFECT is that removing given expression breaks program syntax - can't be removed 
   z = (x+y, 15);
}
编辑

顺便说一句,记住并非所有的表达式语句都有副作用。例如
x=x
在技术上等同于
-在程序集级别编译为NOP或被GCC优化器跳过的空语句。因此,这些类型的表达式语句没有副作用,可以安全地从程序中删除。但这并不意味着可以在不更改程序逻辑的情况下删除每个空语句。例如,在这段代码中:
for(i=0;i<10;i++)


在这里,NOP是在每个CPU周期内执行的,因此如果您将其删除,程序语义将发生根本性的变化。

与其阅读维基百科语言不可知论的文章,不如阅读一篇。阅读维基百科并没有其编辑认为的一半好,而且这两页很糟糕。找一本像样的书。与其读维基百科语言不可知论的文章,不如读一本。读一读维基百科没有编辑们想象的一半好,而且这两页很糟糕。找一本像样的书。问题是
++x表达式?否,
++x
是一个表达式语句,-表达式本身只是
++x
的一部分。一般来说,表达式通常是序列点之间的东西,-一些标记。例如,在
if(a+b>c+d)
if部分有表达式
a+b>c+d
,其中包含两个子表达式
a+b
c+d
。谢谢兄弟回答我的问题!IQuestion是
++x表达式?否,
++x
是一个表达式语句,-表达式本身只是
++x
的一部分。一般来说,表达式通常是序列点之间的东西,-一些标记。例如,在
if(a+b>c+d)
if部分有表达式
a+b>c+d
,其中包含两个子表达式
a+b
c+d
。谢谢兄弟回答我的问题!我