2015-06-24 49 views
0

最近,我遇到了這個代碼:C++ 11 for循環與cin >> buff;

int count=0; 
for(std::string buf; std::cin>>buf;) { 
    count++; 
} 
std::cout << count; 
  1. 我的疑問是,這是什麼代碼呢?
  2. cin>>buf事情是如何在條件部分工作?
  3. 它是不是在一個無限循環?
  4. 試圖把它寫C++ 11給我的錯誤String,從Stringstd::string不同,如果是的話,我需要爲String
+0

沒有預定義'String'用C的任何版本++。 – pmr

+0

好吧,讓我們考慮我使用的std :: string。這個怎麼用? –

回答

1
  1. 然後頭假設String是有效的,當這編譯並運行,它會構造一次,儘可能多地讀取,並且一路數。 count是沒有意義的,雖然,因爲它未初始化。

  2. cin>>buf當然是讀,但也是一個測試,並且當它讀取成功時,表達式計算結果爲true,所以循環再次迭代。

  3. 這可能進入一個無限循環,除非用戶輸入EOF。

  4. pmr是正確的類:String是不同於string。如果要使用循環,最直接的解決方法就是將其更改爲std::string