以下兩個switch語句的代碼片斷之間有什麼區別?C++中的switch語句
哪一個更好?我什麼時候可以同時使用它們?
殼體1:
int i = 10;
switch(i)
{
//case
}
殼體2:
switch(int i = 10, i)
{
//case
}
在第二種情況下,C++ 17允許初始化switch語句內的變量。
以下兩個switch語句的代碼片斷之間有什麼區別?C++中的switch語句
哪一個更好?我什麼時候可以同時使用它們?
殼體1:
int i = 10;
switch(i)
{
//case
}
殼體2:
switch(int i = 10, i)
{
//case
}
在第二種情況下,C++ 17允許初始化switch語句內的變量。
在第一個版本i
過去switch
的範圍結束。如果您以後需要i
,則可以使用它。如果你的編譯器知道C++ 17,你可以使用第二個版本。
第二個case在C++ 17之前是無效的嗎?即從C++ 17開始有效? – songyuanyao
@songyuanyao:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0305r1.html雖然語法似乎是'switch(int i = 10; i)',即使用分號而不是逗號。 – Hasturkun
@Hasturkun感謝您的澄清。因此,因爲C++ 17'switch(int i = 10; i)'變得有效。無論如何它與''無關,''。我根本無法得到這個問題的答案(和這個答案)。 – songyuanyao
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
}
是否的情況下2編譯? https://wandbox.org/permlink/DyHw98R9ErY0h5Kx – songyuanyao
你的意思是'switch(int i = 10; i)' – JHBonarius