2017-04-19 127 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 
}