在许多情况下,我们需要检查函数返回的值,然后根据该值执行条件操作。所以我们的代码看起来像这样
// Some function
return_type foo(params)
// Call function with params and
// store return in var
auto var = foo(params);
if (var == /* some value */) {
//Do Something
} else {
//Do Something else
}
没关系,请注意其中有一些微妙之处
- 变量泄漏到周围的范围内,这不是故意的,必须注意确保此变量不会与其他变量混淆
- 由于已经定义了此变量,因此,如果我们稍后要在程序中调用另一个函数(例如bar()),则需要创建另一个变量来存储从bar()返回的值
- 第三,如果编译器可以明确地知道该变量将仅在一个if-else块中使用,则它可能能够更好地优化代码。
注意所有条件if-else块中的通用格式。首先,有一个可选的初始语句来设置变量,然后是if-else块。因此,一般的if-else块如下所示
init-statement
if (condition) {
// Do Something
} else {
// Do Something else
}
在C++ 17中,init语句称为初始化程序,我们可以将其直接放入if-else块中,如下所示
if (init-statement; condition) {
// Do Something
} else {
// Do Something else
}
条件变量的范围仅限于当前的if-else块。这也使我们可以在另一个条件块中重用相同的命名标识符。
if (auto var = foo(); condition) {
...
}
else{
...
}
// Another if-else block
if (auto var = bar(); condition) {
....
}
else {
....
}
同样,开关盒块也已更新。现在,我们可以在开关括号内放置一个初始表达式。在初始语句之后,我们需要指定使用哪个变量来检查案例
switch (initial-statement; variable) {
....
// cases
}
完整的程序
// Program to demonstrate init if-else
// feature introduced in C++17
#include
#include
using namespace std;
int main() {
// Set up rand function to be used
// later in program
srand(time(NULL));
// Before C++17
int i = 2;
if ( i % 2 == 0)
cout << i << " is even number" << endl;
// After C++17
// if(init-statement; condition)
if (int i = 4; i % 2 == 0 )
cout << i << " is even number" << endl;
// Switch statement
// switch(init;variable)
switch (int i = rand() % 100; i) {
default:
cout << "i = " << i << endl; break;
}
}
输出(取决于机器)
2 is even number
4 is even number
i = 5
注意:要编译这些程序,我们需要最新版本的编译器。在撰写本文时,此功能已在clang 5和gcc 7及更高版本中完全实现。要编译程序,我们还需要指定-std = C++ 17标志
g++-7 program_file.cpp -std=c++17
or
clang++ program_file.cpp -std=c++17
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。