c++實時變量的作用域

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");
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章