2016-11-28 46 views
-3

在看到的http://en.cppreference.com/w/cpp/locale/codecvt關於std::codecvt一個例子,有以下語法:C++ 11語法 '型無功的:var' 被稱爲 '基於範圍關於'

for (char16_t c : str16)

知道str16是一個變量(l值)std::u16string str16

這是什麼意思? 這就是我稱之爲type var : var的標題。


PS:還有一個話題引用的所有特定語法類型?稀有的?

最近我看到:

int ackermann(m,n) 
int m,n; 
{ 
    // function definition 
} 
+5

這是[範圍爲'for'循環]的語法(http://en.cppreference.com/w/cpp/language/range-for) – CoryKramer

+2

顯示的語法在你的例子中是古老的(如'int ackermann(m,n) int m,n;'),老實說,除非你使用80年代/ 90年代的遺留代碼。 'for(char16_t c:str16)'是一個基於循環的範圍,它可以被認爲是str16中的每個char16_t c,在循環的定義中'c'將是當前的char。 – George

+0

這是一個基於範圍的循環 – Rerito

回答

2
for (char16_t c : str16) 

上面的語法定義了一個基於範圍的for循環(在C++ 11中引入)。這實際上是說:

循環每個字符str16,字符複製到一個名爲c變量,並允許我使用它。

例如:

for (char16_t c : str16) 
{ 
    std::cout << c << std::endl; 
} 

你的第二個例子是K & R-C風格函數定義,並且是過時的。請參閱此處以獲取更多信息:Function declaration: K&R vs ANSI

+0

謝謝。鏈接到http://en.cppreference.com/w/cpp/language/range-的參考鏈接也很有用,就像@ starl1qgt給出的一樣 – Sandburg

0

for (char16_t c : str16)是在C++ 11中引入的新的ranged-for循環語法,大量的例子和解釋。

+0

儘管大部分都是正確的(除了「新」),但這個答案沒有用,尤其是對於更有幫助的其他答案 – anatolyg

+0

您是什麼意思的「除了新的」?它在C++ 11中是新的。 – lousybyte

+0

我想你可以說在C++ 11中是新的。這是5(近6)歲。在很久之前,語法在許多編譯器中作爲語言擴展存在。 –