首页 > 编程语言 > 详细

C++中switch 语句中的变量声明和

时间:2016-04-24 06:17:43      阅读:316      评论:0      收藏:0      [点我收藏+]

switch 内部的变量定义:

 1 int i = 1;
 2 switch(i)
 3 {
 4     case 0:
 5         string str;            //error
 6         int val1 = 0;        //error
 7         int val2;              //right
 8         int val3; val3 = 0; //right
 9     case 1:
10         val2 = 9;
11         cout << val2 << endl;
12 }

《C++ Primer》 P163: 如果在某处一个带有初始值的变量位于作用域之外,在另一处该变量位于作用域之内,则从前一处跳转到后一处的行为是非法行为。

在上面的代码中line 5、6是错误的,line 7、8是没问题的。

首先要明确的是,对于line 5、6、7、8中的变量来说,整个switch语句的{}内的声明之后的范围都是可见的。case语句不构成独立的作用域,即在case 0:下定义的val2,在case 1下也是可见的(红色字体貌似有问题)。

但是line5、6是错误的,因为在5、6两行都在声明变量时对变量进行了初始化(line 5 调用了默认的初始化函数),如果跳过此代码,则可能会产生不可意料的错误,编译器会报错。line 7、8是正确的,因为在声明的时候并没有对变量初始化。

所以,不可以跳过带初始值的变量(同一个作用域之内)。 在goto语句中同理:

1 int i = 1;
2 goto case_1;
3 
4 case_0:
5     int val1;        //right
6     int val2 = 9; //error
7 case_1:
8     val1 = 9;
9     val2 = 10;

 

test_scope.cpp: In function ‘int main(int, char**)’:
test_scope.cpp:7: error: jump to label ‘case_1’
test_scope.cpp:2: error:   from here
test_scope.cpp:6: error:   crosses initialization of ‘int val2’ (跳过了val2的初始化)

 

C++中switch 语句中的变量声明和

原文:http://www.cnblogs.com/uangyy/p/5426224.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!