C++ Std::เป็นทางเลือก

C Std Pen Thang Leuxk



คุณลักษณะ “std::เป็นทางเลือก” มีให้ใน C++17 “std::เป็นทางเลือก” ช่วยให้สามารถแสดงค่าทางเลือกหรือตัวเลือกของการมีค่าได้อย่างปลอดภัย คลาสเทมเพลตที่เรียกว่า “std::เป็นทางเลือก” มีค่าทางเลือกซึ่งอาจมีหรือไม่มีค่าที่ถูกต้องก็ได้ เป็นการทดแทนที่ปลอดภัยกว่าในการแสดงค่าว่างหรือค่าทางเลือกมากกว่าพอยน์เตอร์แบบดิบหรือเทคนิคอื่นๆ “std::เป็นทางเลือก” ช่วยลดโอกาสที่จะเกิดข้อผิดพลาดในการอ้างอิงตัวชี้ null โดยกำหนดให้ผู้ใช้ตรวจสอบอย่างชัดเจนว่ามีค่าอยู่หรือไม่ก่อนที่จะดึงข้อมูล

ตัวอย่างที่ 1:

ไฟล์ส่วนหัว 'เป็นทางเลือก' และ 'iostream' จะถูกนำเข้าในโค้ดนี้ เราต้องนำเข้าไฟล์ส่วนหัวเหล่านี้เพื่อให้เราสามารถเข้าถึงฟังก์ชันที่กำหนดไว้ได้อย่างง่ายดาย หลังจากนี้ เราจะรวม 'namespace std' ไว้ด้วย เพื่อที่เราจะได้ไม่ต้องพิมพ์ด้วยฟังก์ชันแยกกัน เช่น 'std::เป็นทางเลือก' และ 'std::cout' เราใช้ “namespace std” ที่นี่ ตอนนี้เราวาง 'ทางเลือก' หรือ 'cout' โดยไม่ต้องพิมพ์ 'std' ไปด้วย

จากนั้นเราเรียกใช้ main() และวาง “ทางเลือก” และตั้งค่าเป็น “int” และประกาศ “myNum” เป็นไวยากรณ์สำหรับการประกาศตัวแปร “std::เป็นทางเลือก” จากนั้น เราจะเริ่มต้นตัวแปรอีกตัวหนึ่งชื่อ “value” และกำหนดค่าให้กับตัวแปร “myNum” โดยใช้ฟังก์ชัน value_or() เราส่งค่า '99' ในฟังก์ชันนี้ ดังนั้นจึงกำหนด '99' นี้ให้กับตัวแปร 'muNum' หากไม่มีค่าอยู่ และจัดเก็บไว้ในตัวแปร 'value' จากนั้นเราวาง “cout” ไว้ใต้สิ่งนี้ ซึ่งช่วยในการแสดงค่าที่เรากำหนดให้กับตัวแปรที่อยู่ด้านบน







รหัส 1:

#รวม <ตัวเลือกเสริม>

#รวม

ใช้เนมสเปซมาตรฐาน -

ภายใน หลัก - - -

ไม่จำเป็น - ภายใน - myNum -

ภายใน ค่า - myNum. ค่า_หรือ - 99 - -

ศาล - 'ค่าของ myNum คือ: ' - ค่า - สิ้นสุด -

กลับ 0 -

-

เอาท์พุท:



ที่นี่เราจะสังเกตได้ว่ามีการแสดง '99' ซึ่งหมายความว่าไม่มีค่าอยู่ด้านบน และค่าที่เราเพิ่มไว้ถูกกำหนดให้กับตัวแปรนั้น







ตัวอย่างที่ 2:

ก่อนอื่นเราจะรวมไฟล์ส่วนหัวและวาง 'namespace std' ด้านล่างนี้ เราประกาศฟังก์ชัน “std::เป็นทางเลือก” ซึ่งก็คือ “divideFunc()” “เงินปันผล” และ “ตัวหาร” เป็นพารามิเตอร์สองตัวของฟังก์ชันนี้ จากนั้นเราใช้ 'if' ด้านล่าง โดยที่เราเพิ่มเงื่อนไขที่ระบุว่า 'ตัวหาร != 0' หากเป็นที่พอใจ ก็จะส่งกลับคำตอบของส่วนนี้เมื่อเราเพิ่ม 'return' เข้าไปภายในส่วนนี้ มิฉะนั้นจะส่งคืนค่า 'nullopt' ซึ่งหมายถึงไม่มีค่าประเภทที่ปลอดภัย ตอนนี้เราเรียกใช้ main() หากต้องการอนุมานถึง “std::ทางเลือก” เราจะวาง “divideFunc()” และเพิ่ม “27, 3” ลงไป และกำหนดผลลัพธ์ให้กับตัวแปร “ผลหาร”

ที่นี่เราใช้คำหลัก 'อัตโนมัติ' เพื่อปรับประเภทข้อมูลโดยอัตโนมัติ หลังจากนี้ เราจะเพิ่ม 'if' โดยที่เราใช้ 'has-value' ซึ่งจะกำหนดว่าจะได้รับค่าประเภทหรือไม่ จากนั้น เราวาง 'cout' ซึ่งแสดงผลลัพธ์ที่เก็บไว้ในตัวแปร 'ผลหาร' และส่วน 'else' มีคำสั่งที่แสดงว่าตัวหารเป็นศูนย์



รหัส 2:

#รวม

#รวม <ตัวเลือกเสริม>

ใช้เนมสเปซมาตรฐาน -

ไม่จำเป็น - ภายใน - ฟังก์ชันหาร - ภายใน เงินปันผล - ภายใน ตัวแบ่ง - -

ถ้า - ตัวแบ่ง - 0 - -

กลับ เงินปันผล - ตัวแบ่ง -

-

กลับ ไม่มีค่า -

-

ภายใน หลัก - - -

อัตโนมัติ ความฉลาดทาง - ฟังก์ชันหาร - 27 - 3 - -

ถ้า - ความฉลาดทาง มี_ค่า - - - -

ศาล - 'ผลเชาวน์คือ:' - ความฉลาดทาง ค่า - - - สิ้นสุด -

- อื่น -

ศาล - 'ตัวหารเป็นศูนย์ที่นี่' - สิ้นสุด -

-

กลับ 0 -

-

เอาท์พุท:

ผลลัพธ์จะแสดงผลลัพธ์หลังการหารซึ่งหมายความว่าตัวหารไม่เป็นศูนย์ ในกรณีนี้ จะใช้ “std::เป็นทางเลือก” เพื่อพิจารณาว่ามีค่าอยู่หรือไม่พิมพ์อย่างปลอดภัย

ตัวอย่างที่ 3:

ที่นี่เรากำลังประกาศตัวแปร “std::ทางเลือก” ซึ่งเป็น “ตัวเลข” ภายใน main() จากนั้น เราใช้ 'if' โดยวางฟังก์ชัน has_value() ไว้กับตัวแปร 'number' นี้ วิธีนี้จะตรวจสอบว่ามีค่าอยู่ในตัวแปร 'ตัวเลข' นี้หรือไม่ หากตัวแปร “number” มีค่าอยู่ มันจะแสดงผลคำสั่งที่เราเพิ่มไว้หลัง “if” มิฉะนั้นจะแสดงข้อความที่เราวางไว้หลัง 'else'

ตอนนี้ เราเริ่มต้น 'number' ด้วย '92' และใช้ 'if' อีกครั้งข้างใต้นี้ โดยที่ฟังก์ชัน has_value() ถูกเพิ่มด้วยตัวแปร 'number' ใน 'if as the Condition' สิ่งนี้จะกำหนดว่าตัวแปร 'ตัวเลข' มีค่าหรือไม่ ประโยคที่เราเพิ่มหลัง 'if' จะแสดงผลหากตัวแปร 'number' มีค่า ถ้าไม่เช่นนั้น ข้อความที่เราวางไว้หลัง 'else' จะถูกแสดงผล

รหัส 3:

#รวม

#รวม <ตัวเลือกเสริม>

ภายใน หลัก - - -

มาตรฐาน - ไม่จำเป็น - ภายใน - ตัวเลข -

ถ้า - ตัวเลข. มี_ค่า - - - -

มาตรฐาน - ศาล - 'มีหมายเลขอยู่:' - ตัวเลข. ค่า - - - มาตรฐาน - สิ้นสุด -

- อื่น -

มาตรฐาน - ศาล - 'หมายเลขไม่ปรากฏ' - มาตรฐาน - สิ้นสุด -

-

ตัวเลข - 92 -

ถ้า - ตัวเลข. มี_ค่า - - - -

มาตรฐาน - ศาล - 'มีหมายเลขอยู่:' - ตัวเลข. ค่า - - - มาตรฐาน - สิ้นสุด -

- อื่น -

มาตรฐาน - ศาล - 'หมายเลขไม่ปรากฏ' - มาตรฐาน - สิ้นสุด -

-

กลับ 0 -

-

เอาท์พุท:

วิธีนี้จะแสดงผลส่วน “else” ก่อน เนื่องจากเราไม่ได้กำหนดค่าใดๆ ให้กับตัวแปร “std::option” จากนั้นเรากำหนดค่าให้กับตัวแปรนี้เพื่อแสดงค่านั้นในบรรทัดถัดไป

ตัวอย่างที่ 4:

ตอนนี้เราประกาศตัวแปร “std::ทางเลือก” สามตัว ได้แก่ “n1”, “n2” และ “n3” นอกจากนี้เรายังกำหนดค่าให้กับตัวแปร 'n2' และ 'n3' ซึ่งก็คือ '29' และ '45' ตามลำดับ ตัวแปร “n1” ของคลาส “std::เป็นทางเลือก” ว่างเปล่าที่นี่ ตอนนี้เราใช้ 'boolalpha' ซึ่งช่วยในการส่งคืนผลตอบแทนในรูปแบบ 'จริง' หรือ 'เท็จ' แทนที่จะเป็น '1' และ '0'

หลังจากนี้ เราใช้ตัวดำเนินการเชิงสัมพันธ์ระหว่างตัวแปร “std::ทางเลือก” เหล่านี้ และวางแต่ละคำสั่งไว้ใน “cout” ดังนั้นมันจะแสดงผลผลลัพธ์ของการเปรียบเทียบที่เราเพิ่มเข้าไปด้วย ขั้นแรก ให้ตรวจสอบว่า “n3 > n2” จากนั้น “n3 < n2”, “n1 < n2”, “n1 == std::nullopt ” ในที่นี้ “nullopt” ใช้เพื่อเปรียบเทียบค่าที่ไม่มีประเภทปลอดภัยหรือค่าว่าง จากนั้น เราจะตรวจสอบ “n2 == 49” และ “n3 == 88” ภายในคำสั่ง “cout” แยกกัน

รหัส 4:

#รวม <ตัวเลือกเสริม>

#รวม

ภายใน หลัก - -

-

มาตรฐาน - ไม่จำเป็น - ภายใน - n1 -

มาตรฐาน - ไม่จำเป็น - ภายใน - n2 - 29 - -

มาตรฐาน - ไม่จำเป็น - ภายใน - n3 - สี่ห้า - -

มาตรฐาน - ศาล - มาตรฐาน - ตัวอักษรและตัวเลข -

มาตรฐาน - ศาล - 'n3 > n2' - - n3 - n2 - - มาตรฐาน - สิ้นสุด -

มาตรฐาน - ศาล - 'n3 < n2' - - n3 - n2 - - มาตรฐาน - สิ้นสุด -

มาตรฐาน - ศาล - 'เอ็น1 <เอ็น2' - - n1 - n2 - - มาตรฐาน - สิ้นสุด -

มาตรฐาน - ศาล - 'n1 == เป็นโมฆะ' - - n1 - มาตรฐาน - ไม่มีค่า - - มาตรฐาน - สิ้นสุด -

มาตรฐาน - ศาล - 'n2 == 49' - - n2 - 29 - - มาตรฐาน - สิ้นสุด -

มาตรฐาน - ศาล - 'n3 == 88' - - n3 - 88 - - มาตรฐาน - สิ้นสุด -

-

เอาท์พุท:

โปรแกรม C++ ที่เรากล่าวถึงก่อนหน้านี้จะเปรียบเทียบค่าตัวแปรต่างๆ ของประเภท “std::เป็นทางเลือก” ในขณะที่พิมพ์ผลลัพธ์ไปยังเอาต์พุตไปพร้อมๆ กัน

ตัวอย่างที่ 5:

ไฟล์ส่วนหัวที่รวมอยู่ในโค้ดนี้คือ 'iostream', 'fstream', 'เป็นทางเลือก' และ 'string' “fstream” มีคำจำกัดความของทั้งสองฟังก์ชันคือ “ofstream” และ “ifstream” ที่เราต้องการในโค้ดนี้ ตอนนี้ เราได้รวม 'เนมสเปซ std' ไว้แล้ว ดังนั้นเราจึงไม่แยกมันออกจากกันในแต่ละฟังก์ชัน จากนั้น เราใช้ “std:เป็นทางเลือก” และประกาศฟังก์ชันที่มีชื่อ “ReadFileFunc” ซึ่งเราจะส่งผ่าน “const string& f_Name” เป็นอาร์กิวเมนต์

จากนั้น เรามี 'ifstream' ที่ช่วยในการอ่านไฟล์ที่จะเพิ่มชื่อลงในตัวแปร 'f_name' จากนั้น เราใช้ 'if' โดยที่เรารวมเงื่อนไขที่ระบุว่าหากไฟล์ไม่ได้เปิดขึ้น ไฟล์จะส่งคืน 'nullopt' ตามที่เราเพิ่มไว้ด้านล่างคำสั่ง 'if' จากนั้นเราสร้างฟังก์ชันอื่นขึ้นมาซึ่งก็คือ “fileContent” ที่ช่วยในการเขียนเนื้อหาลงในไฟล์หากไฟล์ถูกเปิด ที่นี่ เราวาง 'return fileContent' อีกครั้ง ซึ่งจะส่งคืนเนื้อหาที่เราเพิ่มลงในไฟล์หลังจากเปิดด้วย

ตอนนี้เราเรียก 'main()' ที่นี่ซึ่งเราจะเริ่มต้นตัวแปร 'f_Name' ด้วยชื่อไฟล์ 'Sample.txt' ที่เราต้องการเปิด จากนั้นเราเรียก 'ReadFileFunc()' ที่นี่และส่งตัวแปร 'f_Name' ในฟังก์ชันนี้ซึ่งจะพยายามอ่านไฟล์และจัดเก็บเนื้อหาไว้ในตัวแปร 'f_content' ด้านล่างนี้ เราใช้ 'has_value()' กับตัวแปร 'f_content' ใน 'if' หากตัวแปรนี้มีค่า มันจะเรนเดอร์เมื่อเราเพิ่ม “cout” ใต้ “if” ซึ่งเราได้วาง “f_content” ไว้ด้วย มิฉะนั้นจะแสดงข้อผิดพลาดที่เราเพิ่มไว้หลัง 'else'

รหัส 5:

#รวม

#รวม

#รวม <ตัวเลือกเสริม>

#รวม

ใช้เนมสเปซมาตรฐาน -

ไม่จำเป็น - เชือก - อ่าน FileFunc - ค่าคงที่ เชือก - ฉ_ชื่อ - -

ถ้าสตรีม myFile - ฉ_ชื่อ - -

ถ้า - - myFile. เปิด - - - -

กลับ ไม่มีค่า -

-

เนื้อหาไฟล์สตริง - - isstreambuf_iterator - ถ่าน - - myFile - - - isstreambuf_iterator - ถ่าน - - - - -

กลับ ไฟล์เนื้อหา -

-

ภายใน หลัก - - -

ค่าคงที่ สตริง f_Name - 'ตัวอย่าง.txt' -

อัตโนมัติ f_content - อ่าน FileFunc - ฉ_ชื่อ - -

ถ้า - f_content. มี_ค่า - - - -

ศาล - “เนื้อหาของไฟล์คือ: \n - - f_content. ค่า - - - สิ้นสุด -

- อื่น -

เซอร์ - 'ข้อผิดพลาด: ไฟล์ไม่ได้เปิดที่นี่' - ฉ_ชื่อ - สิ้นสุด -

-

กลับ 0 -

-

เอาท์พุท:

ที่นี่จะแสดงข้อความแสดงข้อผิดพลาดที่เราเพิ่มไว้ในส่วน 'else' ซึ่งเป็นผลลัพธ์ของโค้ดที่กำหนด

บทสรุป

ในบทช่วยสอนนี้ เราได้สำรวจฟีเจอร์ C++ ที่แข็งแกร่งซึ่งก็คือ “std::เป็นทางเลือก” และอธิบายว่าฟีเจอร์นี้นำเสนอวิธีการมาตรฐานในการแสดงค่าเผื่อเลือก โดยขจัดข้อกำหนดสำหรับการอ้างอิงที่เป็นค่าว่าง และปรับปรุงความชัดเจนและความปลอดภัยของโค้ด เราได้เรียนรู้ว่ายังปรับปรุงความสามารถในการอธิบายปัญหาที่ซับซ้อนและจัดการกับข้อผิดพลาดอย่างสุภาพอีกด้วย