C ++ 17 ได้ขยายที่มีอยู่ if ไวยากรณ์ของคำสั่ง ตอนนี้สามารถระบุเงื่อนไขเริ่มต้นภายในคำสั่ง if เองได้ ไวยากรณ์ใหม่นี้เรียกว่า "if statement with initializer" การปรับปรุงนี้ช่วยลดความซับซ้อนของรูปแบบโค้ดทั่วไป และช่วยให้ผู้ใช้รักษาขอบเขตให้แคบลง ซึ่งจะช่วยป้องกันไม่ให้ตัวแปรรั่วไหลออกนอกขอบเขต
ตัวอย่าง
สมมุติว่าเราต้องการตรวจสอบว่าจำนวนที่กำหนดเป็นเลขคู่หรือคี่ ก่อน C++17 โค้ดของเราเคยเป็นแบบนี้ -
#include <iostream> #include <cstdlib> using namespace std; int main() { srand(time(NULL)); int random_num = rand(); if (random_num % 2 == 0) { cout << random_num << " is an even number\n"; } else { cout << random_num << " is an odd number\n"; } return 0; }
ผลลัพธ์
เมื่อคุณคอมไพล์และรันโค้ดด้านบน มันจะสร้างผลลัพธ์แบบนี้ -
1555814729 is an odd number
ในตัวอย่างข้างต้น เราจะเห็นว่าตัวแปร "random_num" รั่วไหลนอกขอบเขต if-else เราสามารถหลีกเลี่ยงสิ่งนี้ได้อย่างง่ายดายด้วยไวยากรณ์ "if statement with initializer" ใหม่
ด้านล่างนี้คือไวยากรณ์ของ "if statement with initializer" −
if (init; condition) { // Do stuff when Boolean condition is true } else { // Do stuff when Boolean condition is false }
ตัวอย่าง
ตอนนี้ให้เราเขียนโค้ดเดียวกันโดยใช้คำสั่ง if ใหม่พร้อมตัวเริ่มต้น -
#include <iostream> #include <cstdlib> using namespace std; int main() { srand(time(NULL)); // C++17 if statement with initializer if (int random_num = rand(); random_num % 2 == 0) { cout << random_num << " is an even number\n"; } else { cout << random_num << " is an odd number\n"; } return 0; }
ในตัวอย่างข้างต้น ขอบเขตของตัวแปร "random_num" ถูกจำกัดไว้ที่บล็อก if-else ดังนั้นตัวแปรนี้จะไม่สามารถเข้าถึงได้นอกบล็อกนี้ น่าแปลกที่มันรักษาขอบเขตของตัวแปรให้แน่นโดยไม่ส่งผลกระทบต่อเอาต์พุตจริง
ผลลัพธ์
เมื่อคุณคอมไพล์และรันโค้ดด้านบน มันจะสร้างผลลัพธ์แบบนี้ -
943513352 is an even number
หมายเหตุ − ในขณะที่เรากำลังสร้างตัวเลขสุ่มในแต่ละครั้ง เอาต์พุตจะแตกต่างกันไปสำหรับการรันแต่ละครั้งแม้ในเครื่องเดียวกัน