Thường ta cần kiểm tra giá trị trả về từ hàm và thực hiện điều kiện. Code truyền thống:
auto var1 = foo(Params);
if (var1 == /* giá trị */) { /* làm gì đó */ }
else { /* làm gì đó khác */ }
Định dạng chung: câu lệnh khởi tạo (init-statement) theo sau là if-else.
init-statement
if (condition) { ... } else { ... }
C++17 cho phép đưa init-statement trực tiếp vào if (gọi là initializer):
if (init-statement; condition) { ... } else { ... }
Phạm vi biến điều kiện bị giới hạn trong khối if-else, cho phép tái dùng tên biến trong khối khác.
if (auto var1 = foo(); condition) { ... } else { ... }
if (auto var1 = bar(); condition) { ... } else { ... }
Tương tự, switch cũng được cập nhật:
switch (init-statement; variable) { ... }
Chương trình minh họa đầy đủ
// Demo init if-else C++17
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
srand(time(NULL));
// Trước C++17
int I = 2;
if (I % 2 == 0) cout << I << " is even number" << endl;
// C++17
if (int I = 4; I % 2 == 0) cout << I << " is even number" << endl;
// Switch với initializer
switch (int I = rand() % 100; I) {
default: cout << "I = " << I << endl; break;
}
}