C++的作用域问题

C++语言 码拜 9年前 (2016-05-11) 1137次浏览
这是在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

2

引用:

重新说下:
1和2、if()里的a的作用域是 if 里的全部块。块里的a的作用域仅限于各自的块。
3里面 a 作用域在for的{}里,所以 int a;实际只执行了1次。之后每次到 int a;这句,都不会在重新产生一个新的a

每次循环a都会重新创建并被销毁。

2

引用:
Quote: 引用:

重新说下:
1和2、if()里的a的作用域是 if 里的全部块。块里的a的作用域仅限于各自的块。
3里面 a 作用域在for的{}里,所以 int a;实际只执行了1次。之后每次到 int a;这句,都不会在重新产生一个新的a

每次循环a都会重新创建并被销毁。

基本就是上面说的那样,在循环里定义变量不会重命名,原因是每次循环之间的作用域是相互隔离的,这次循环和下次循环的变量不会相互冲突,也可以理解为编译器每次都会创建在销毁,但其实是根据编译器的优化情况决定的,假如开了优化,那可能连一个a都不会产生
这方面的文章,,,,题主就百度一下作用域和生存期这些知识吧

2

关于三:变量作用域是编译期的事情。在编译期,只有一个块作用域和一个变量 a 。变量 a 在进入这个块是创建,退出这个块是被销毁。
运行时,这个块被执行了 5 次。

2

全部都能通过啊,其他见楼上

2

引用:

关于三:变量作用域是编译期的事情。在编译期,只有一个块作用域和一个变量 a 。变量 a 在进入这个块是创建,退出这个块是被销毁。
运行时,这个块被执行了 5 次。

++
编译期,只认这个块,不管循环几次,
编译时,只有一次编译这个块
运行时,多次循环,会多次, 会进入和退出块
每次执行,进入初始化 a ,用完,退出销毁a


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++的作用域问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)