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

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. 

主站蜘蛛池模板: 宁国市| 宝应县| 金湖县| 福建省| 通州区| 青铜峡市| 石泉县| 泌阳县| 伊春市| 祁阳县| 潮州市| 清水河县| 井研县| 那曲县| 牙克石市| 夏邑县| 夹江县| 晋宁县| 耿马| 绥中县| 衡阳市| 綦江县| 德昌县| 会泽县| 福贡县| 宜兰县| 定襄县| 河北省| 佛教| 巴楚县| 塔城市| 云浮市| 菏泽市| 宝清县| 乌苏市| 九龙县| 沅陵县| 清徐县| 金塔县| 双峰县| 科技|