以下两个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