ที่นี่ เราจะเห็นแนวคิดของตัวอักษรที่ผู้ใช้กำหนดใน C++ จาก C++ เวอร์ชัน 11 User Defined Literals (UDL) จะถูกเพิ่มใน C++ นอกจากนี้ C++ ยังจัดเตรียมตัวอักษรสำหรับประเภทในตัวที่หลากหลาย แต่สิ่งเหล่านี้มีข้อจำกัด
ตัวอักษรในตัว -
-
31 (จำนวนเต็ม)
-
3.5 (ดับเบิ้ล)
-
4.2F (ลอย)
-
'p' (ตัวละคร)
-
31ULL (ไม่มีเครื่องหมาย Long Long)
-
0xD0 (จำนวนเต็มเลขฐานสิบหกที่ไม่ได้ลงนาม)
-
"pq" (สตริง)
นอกเหนือจากตัวอักษรในตัวแล้ว บางครั้งเราต้องการตัวอักษรที่ผู้ใช้กำหนด มีเหตุผลบางประการที่อยู่เบื้องหลัง เรามาดูตัวอย่างกัน −
สมมติว่าเราต้องการกำหนดตัวแปรน้ำหนักตัวหนึ่ง แต่เราไม่สามารถระบุหน่วยได้ เช่น หากเรากำหนดดังนี้ -
long double Weight = 3.5;
เราไม่มีความคิดเกี่ยวกับหน่วย (ปอนด์? กิโลกรัม? กรัม) แต่การใช้ UDL เราสามารถแนบหน่วยกับค่าต่างๆ ได้ มีประโยชน์เล็กน้อย ทำให้โค้ดอ่านง่ายขึ้น และยังรองรับการแปลงระหว่างเวลาคอมไพล์
weight = 5.6kg; ratio = 5.6kg/2.1lb;
ในการหาอัตราส่วนข้างต้น จำเป็นต้องแปลงให้เป็นหน่วยเดียวกัน แต่ UDL ช่วยให้เราเอาชนะต้นทุนการแปลหน่วยได้ ในกรณีนี้ เราสามารถกำหนดตัวอักษรที่กำหนดโดยผู้ใช้ในกรณีของประเภทที่กำหนดโดยผู้ใช้และรูปแบบใหม่ของตัวอักษรในกรณีของประเภทในตัว UDL ไม่สามารถประหยัดเวลาในการเขียนโค้ดได้มาก แต่การคำนวณต่างๆ สามารถเปลี่ยนเป็นเวลาคอมไพล์ได้มากขึ้นเรื่อยๆ เนื่องจากการดำเนินการที่เร็วขึ้น
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include<iostream> #include<iomanip> using namespace std; unsigned long long int operator"" _kb( unsigned long long int x ) { return x*1024; } unsigned long long int operator"" _b( unsigned long long int x ) { return x; } unsigned long long int operator"" _mb( unsigned long long int x ) { return x * 1024 * 1024; } int main() { unsigned long long int size = 24_kb; cout << "Size:" << size << endl; cout << "Few more MB:" << ( size + 2_mb ) << endl; cout << "Size Div:" <<( 10_kb / 2_kb ) << endl; cout << "1KB = " <<( 8_b * 128_b ) << endl; return 0; }
ผลลัพธ์
Size:24576 Few more MB:2121728 Size Div:5 1KB = 1024