您的位置:首页 > 编程语言 > C语言/C++

c++实时变量的作用域

2015-03-27 13:51 246 查看
c++中我们经常定义实时变量,如:

for(int i = 0; i < 10; i++)
{
//....
}


这里就定义了一个实时变量i,作用域为整个for循环

那么这么一段代码呢:

while((char c = cin.get()) != 'q')
{
//.....
}


这段代码也定义了一个实时变量c,咋一看这段代码是没有问题的

但是在编译器中是会报错的



原因是什么呢??

(char c = cin.get())


这一句定义了一个实时变量c,而这个变量的作用域只在括号呢,当这个括号内运算完毕后,变量c便无效了~

再与'q'进行比较,因此编译器肯定会报错咯~~

这种情况下就不会出错:

while(char c = cin.get() != 'q')
{
//.......
}
这样的话c的作用域就是整个while循环

但由于!= 的优先级比 = 高

于是先进行cin.get() != 'q'的比较,然后将比较后的结果由bool型转为char型赋给c

所以若输入不为q时,c的值会为笑脸





以下是正确且符合要求的代码:

#include <iostream>
#include <cstdlib>

using namespace std;

int main(void)
{
char c;
while( (c = cin.get()) != 'q')
{
cout << c;
}

system("pause");
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 作用域