Computer >> Máy Tính >  >> Lập trình >> C ++

Các câu lệnh khác và chuyển đổi với trình khởi tạo trong C ++ 17

Trong nhiều trường hợp, chúng ta cần xác minh giá trị của thứ gì đó được trả về bởi một hàm và thực hiện các hoạt động có điều kiện dựa trên giá trị này. Vì vậy, mã của chúng tôi được cung cấp bên dưới -

// Some method or function
return_type foo(Params)
// Call function with Params and
// store return in var1
auto var1 = foo(Params);
if (var1 == /* some value */) {
   //Perform Something
} else {
   //Perform Something else
}

Chỉ cần tuân theo định dạng chung trong tất cả các khối if-else có điều kiện. Đầu tiên, tồn tại một câu lệnh ban đầu tùy chọn thiết lập biến, theo sau là khối if-else. Vì vậy, khối if-else chung được đưa ra như sau -

init-statement
if (condition) {
   // Perform or Do Something
} else {
   // Perform or Do Something else
}

Trong C ++ 17, câu lệnh init được ký hiệu hoặc được gọi là bộ khởi tạo và chúng ta có thể trực tiếp giữ nó vào khối if-else theo cách sau

if (init-statement; condition) {
   // Perform Something
} else {
   // Perform Something else
}

Phạm vi của biến có điều kiện bị giới hạn hoặc giới hạn trong khối if-else hiện tại. Điều này cũng cho phép chúng tôi sử dụng lại cùng một số nhận dạng được đặt tên trong một khối có điều kiện khác.

if (auto var1 = foo(); condition) {
   ...
}
else{
   ...
}
// Another if-else block
if (auto var1 = bar(); condition) {
   ....
}
else {
....
}

Trong trường hợp tương tự, khối trường hợp chuyển mạch đã được sửa đổi hoặc cập nhật. Bây giờ chúng ta có thể giữ một biểu thức ban đầu bên trong dấu ngoặc đơn của switch.

Sau câu lệnh ban đầu, chúng tôi yêu cầu chỉ định biến nào đang được triển khai để kiểm tra các trường hợp

switch (initial-statement; variable) {
   ....
   // cases
}

Một chương trình hoàn chỉnh

// Program to explain or demonstrate init if-else
// feature introduced in C++17
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
   // Fix or set up rand function to be implemented
   // 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;
   }
}