官术网_书友最值得收藏!

Initializers in if/switch statements

In C++17, it is now possible to define a variable and initialize it in the definition of an if and switch statement, as follows:

#include <iostream>

int main(void)
{
if (auto i = 42; i > 0) {
std::cout << "Hello World\n";
}
}

// > g++ scratchpad.cpp; ./a.out
// Hello World

In the preceding example, the i variable is defined and initialized inside the if statement using a semicolon (;) inside the branch itself. This is especially useful for C- and POSIX-style functions that return error codes, as the variable that stores the error code can be defined in the proper context.

What makes this feature so important and useful is that the variable is only defined when the condition is met. That is, in the preceding example, i only exists if i is greater than 0.

This is extremely helpful in ensuring that variables are available when they are valid, helping to reduce the likelihood of working with an invalid variable. 

The same type of initialization can occur with switch statements as follows:

#include <iostream>

int main(void)
{
switch(auto i = 42) {
case 42:
std::cout << "Hello World\n";
break;

default:
break;
}
}

// > g++ scratchpad.cpp; ./a.out
// Hello World

In the preceding example, the i variable is created only in the context of the switch statement. Unlike the if statement, the i variable exists for all cases, meaning the i variable is available in the default state, which could represent the invalid state. 

主站蜘蛛池模板: 米泉市| 通山县| 全州县| 保德县| 长海县| 汾阳市| 抚松县| 天台县| 德化县| 颍上县| 滕州市| 铅山县| 广东省| 延津县| 武强县| 治多县| 苍溪县| 丘北县| 梁平县| 惠来县| 民勤县| 理塘县| 湖南省| 临清市| 巴彦淖尔市| 寿宁县| 根河市| 合江县| 洪雅县| 海伦市| 香港| 和林格尔县| 临猗县| 梧州市| 布尔津县| 荔浦县| 永登县| 土默特左旗| 平和县| 永泰县| 西林县|