對於C++17標準,if和switch語句有以下新形式:
- if (init; condition)
- switch (init; condition)
初始語句支持定義多個相同類型的變量,條件語句可以是任何條件,不限於以變量值作爲判斷條件。
對於初始語句定義的變量,在if-else及switch-case部分都可見,而在if和switch的外層作用域不可見,如此能夠縮小變量作用域。
#include <random>
#include <ctime>
#include <iostream>
int main()
{
std::default_random_engine randomEngine;
randomEngine.seed(static_cast<unsigned>(time(nullptr)));
using std::cout;
if (auto num = randomEngine(); num & 0x01)
cout << "The " << num << " is singular.";
else
cout << "The " << num << " is even.";
return 0;
}
新語法init statement for if/switch很有趣,可以在if/switch語句內部綁定和處理函數返回值。
在17標準之前,if和switch語句雖然也可以定義變量,不過僅限單個變量,並且以變量值作爲判斷條件。
除此之外,爲避免污染外層作用域,通過花括號技巧(即代碼塊)來縮短變量生命週期。
#include <random>
#include <ctime>
#include <iostream>
int main()
{
std::default_random_engine randomEngine;
randomEngine.seed(static_cast<unsigned>(time(nullptr)));
using std::cout;
{
auto num = randomEngine();
if (num & 0x01)
cout << "The " << num << " is singular.";
else
cout << "The " << num << " is even.";
}
return 0;
}