百科问答小站 logo
百科问答小站 font logo



C/C++ 小括号中为何不能声明变量的同时对其赋值? 第1页

  

user avatar   anthonyh 网友的相关建议: 
      

在命令式语言中,我们主要使用语句,表达式只是一种语法糖,它没有必要过于强大。

我认为最原始的问题可能来自于我们可以在for/while/switch的小括号中声明变量,但是不能在这些语句之外引入括号中声明变量。

事实上这个问题我认为这个设计主要解决变量的作用域问题,也就是说变量的作用域应该大于表达式,才不违反直觉(估计最初只是为了编译方便)。如a + (int a = 3) + a, 这个三个a表达什么含义呢?如果中间的a只在括号内有作用,那其实没有必要在表达式内声明。如果在整个表达式都有效,那么第一个a和最后一个a是否表示不同的变量?

假定我们可以做到在表达式中声明变量,事实上我们需要这样的语法:

(int a, b in some express)

这确实c++不支持的,因为从C开始,这就是一种命令式语言,它主要是依靠修改

变量的值来解决问题。C++的表达式的能力有限,只不过它支持一种非常类似的东西:

{int a, b; some express;}

这个与上面唯一不同的地方只有它是一个语句,不是一个表达式。

反过来,我们再看for/while/switch,很明显,它们也是语句。




  

相关话题

  以前 CSDN 很好,但是现在只有提问的,都是没人回复,没人参与了,现在的程序员遇到问题用什么交流呢? 
  中国的软件为什么没有国外的发达? 
  为什么总感觉DNA有种智慧设计的味道,更象一种编程语言,一定有人说是演化的结果,但是做个假设,如果? 
  C语言中,为什么指向指针的指针的类型是int **?类型的话直接int*不就行了? 
  for(int i = 0; ; i++); printf("i love you"); 请问这条代码是什么意思,可以运行出什么结果? 
  在c++代码中使用const关键字是不是自找麻烦? 
  黑客可以厉害到什么程度? 
  为什么那些会多国语言的人常常被赞赏,貌似没什么人因为精通各种编程语言而赞赏程序猿? 
  通俗地讲为何要有返回值? 
  普通程序员如何正确学习人工智能方向的知识? 

前一个讨论
为什么著名的轮子很少有用 Lisp 写的?
下一个讨论
算法老师劝学生放弃学习 JavaScript,我该怎么办?





© 2025-07-01 - tinynew.org. All Rights Reserved.
© 2025-07-01 - tinynew.org. 保留所有权利