在瀏覽我的朋友的代碼,我就注意到這一點:開關頭中的變量聲明?
switch(State &state = getState()) {
case Begin: state = Search; break;
// other stuff similar
}
什麼是在開關頭部的變量?他正在使用GCC,所以我認爲這可能是GCC擴展。任何想法?
在瀏覽我的朋友的代碼,我就注意到這一點:開關頭中的變量聲明?
switch(State &state = getState()) {
case Begin: state = Search; break;
// other stuff similar
}
什麼是在開關頭部的變量?他正在使用GCC,所以我認爲這可能是GCC擴展。任何想法?
這不是祕密或GCC擴展。變量允許在諸如if
s,while
s和switch
es的條件下聲明。例如:
while (char c = cin.get()) { ... }
或
if (int* something = (int*)malloc(4)) { // but don't use malloc in C++
// ...
}
後它們被聲明的初始化,它們被轉換爲一個bool
值,並且如果他們評估爲true
執行塊,並且該塊被否則跳過。它們的範圍是其聲明條件的構造的範圍(並且在if
的情況下,範圍也覆蓋了所有的else if
和else
塊)。
在C++ 03標準的§6.4.1,它說
選擇語句選擇若干控制流之一。
selection-statement: if (condition) statement if (condition) statement else statement switch (condition) statement condition: expression type-specifier-seq declarator = assignment-expression
所以你可以看到,它允許type-specifier-seq declarator = assignment-expression
在if
或switch
的條件。而且你會在「重複構造」部分找到類似的東西。
此外,switch
ES上一體或enum
類型或類實例可以隱式轉換爲一個整體或enum
類型(§6.4.4)工作:
的條件的值,該值是 中的初始化聲明switch語句是聲明變量的值,如果它具有 積分或枚舉類型,或者該變量隱式轉換爲 否則爲整數或枚舉類型。
我其實知道了FROM AN ANSWER YOU POSTED關於「隱藏的C++特性」的問題。所以我很高興我可以提醒你:)
是的,但它在'switch()'上,這意味着它只接受'int'值? – Muggen 2012-04-28 17:38:30
@Muggen在例子'State'中可能是'enum'。 – 2012-04-28 17:39:06
是這個C++ 11嗎? hmm – 2012-04-28 17:39:16
代碼塊開始與開放大括號,所以它不應該是一個問題。 – 2012-04-28 17:37:03
這是你的一個詭計問題嗎?我感覺到這個Q有一個被接受的答案時,我們的方式激烈地來到我們的方式: - ] – 2012-04-28 17:37:35
哦,我沒有意識到它是約翰內斯...我覺得被騙回答。 – 2012-04-28 17:38:04