C++17 if/switch初始化語句塊

對於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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章