这是在C++中的代码:
第一种情况:
第一种情况:
if (int a=0) { int a = 20; } else { int a = 30; }
这两句a=20造成了重复定义,这证明这3个a是在同一个局部域当中的
第二种情况:
if (false) { int a = 20; } else { int a = 30; }
既然第一种情况证明这三个a在同一个域当中,那这二种情况为什么编译可以通过?
第三种情况:
for (int i = 1; i < 5; i++) { int a = 5; }
for语句内会不会相当于a定义了5次?这样的语法为什么可以通过?
这些情况三言两语肯定说不清楚,本人想请高手们能否发点这方面的的文章给本人看看?好像switch和while中的情况都比较特殊的
解决方案
30
重新说下:
1和2、if()里的a的作用域是 if 里的全部块。块里的a的作用域仅限于各自的块。
3里面 a 作用域在for的{}里,所以 int a;实际只执行了1次。之后每次到 int a;这句,都不会在重新产生一个新的a
1和2、if()里的a的作用域是 if 里的全部块。块里的a的作用域仅限于各自的块。
3里面 a 作用域在for的{}里,所以 int a;实际只执行了1次。之后每次到 int a;这句,都不会在重新产生一个新的a
2
每次循环a都会重新创建并被销毁。
2
基本就是上面说的那样,在循环里定义变量不会重命名,原因是每次循环之间的作用域是相互隔离的,这次循环和下次循环的变量不会相互冲突,也可以理解为编译器每次都会创建在销毁,但其实是根据编译器的优化情况决定的,假如开了优化,那可能连一个a都不会产生
这方面的文章,,,,题主就百度一下作用域和生存期这些知识吧
2
关于三:变量作用域是编译期的事情。在编译期,只有一个块作用域和一个变量 a 。变量 a 在进入这个块是创建,退出这个块是被销毁。
运行时,这个块被执行了 5 次。
运行时,这个块被执行了 5 次。
2
全部都能通过啊,其他见楼上
2
关于三:变量作用域是编译期的事情。在编译期,只有一个块作用域和一个变量 a 。变量 a 在进入这个块是创建,退出这个块是被销毁。
运行时,这个块被执行了 5 次。
++
编译期,只认这个块,不管循环几次,
编译时,只有一次编译这个块
运行时,多次循环,会多次, 会进入和退出块
每次执行,进入初始化 a ,用完,退出销毁a