2017-04-19 128 views
1

以下兩個switch語句的代碼片斷之間有什麼區別?C++中的switch語句

哪一個更好?我什麼時候可以同時使用它們?

殼體1:

int i = 10; 
switch(i) 
{ 
//case 
} 

殼體2:

switch(int i = 10, i) 
{ 
//case 
} 

在第二種情況下,C++ 17允許初始化switch語句內的變量。

+0

是否的情況下2編譯? https://wandbox.org/permlink/DyHw98R9ErY0h5Kx – songyuanyao

+1

你的意思是'switch(int i = 10; i)' – JHBonarius

回答

5

在第一個版本i過去switch的範圍結束。如果您以後需要i,則可以使用它。如果你的編譯器知道C++ 17,你可以使用第二個版本。

+1

第二個case在C++ 17之前是無效的嗎?即從C++ 17開始有效? – songyuanyao

+0

@songyuanyao:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0305r1.html雖然語法似乎是'switch(int i = 10; i)',即使用分號而不是逗號。 – Hasturkun

+3

@Hasturkun感謝您的澄清。因此,因爲C++ 17'switch(int i = 10; i)'變得有效。無論如何它與''無關,''。我根本無法得到這個問題的答案(和這個答案)。 – songyuanyao

3

switch (int i = 42; i)是C++ 17和將限制的i到交換機的範圍,這將是大多等效於:

// Code before switch 
{ // Additional scope 
    int i = 42; 
    switch (i) { 
    // case... 
    } 
} 
// Code after switch 

它也將適用於if

if (int i = 42; i == foo()) { 
    // Can use i 
} else { 
    // Can use i 
}