Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

static const vs #define vs enum ใน C++: ความแตกต่างและการใช้งาน

"static const"

"static const" เป็นการรวมของ static (storage specifier) และ const (type qualifier)

static กำหนดอายุการใช้งานและการมองเห็น/เข้าถึงของตัวแปร หมายถึงถ้าตัวแปรประกาศเป็น static จะอยู่ในหน่วยความจำตลอดเวลาที่โปรแกรมทำงาน ในขณะที่ตัวแปรปกติหรือ auto จะถูกทำลายเมื่อฟังก์ชัน (ที่ตัวแปรถูกกำหนด) จบการทำงาน

const เป็น type qualifier ใช้แสดงข้อมูลเพิ่มเติมเกี่ยวกับค่าผ่านระบบชนิดข้อมูล เมื่อตัวแปรถูกเริ่มต้นด้วย const จะไม่ยอมรับการเปลี่ยนแปลงค่าได้

ดังนั้น การรวม static และ const สามารถกล่าวได้ว่า เมื่อตัวแปรเริ่มต้นด้วย static const จะเก็บค่าไว้จนกว่าโปรแกรมจะจบการทำงาน และไม่ยอมรับการเปลี่ยนแปลงค่าใดๆ

ตัวอย่าง

#include <iostream>
using namespace std;

int main() {
    int input = 10;
    static const int value = 5;
    input += value;
    cout << input;
    return 0;
}

"#define"

คำสั่ง Preprocessor เรียกว่า DIRECTIVES เริ่มต้นด้วยสัญลักษณ์ # (pound/hash) ไม่ควรมีช่องว่างก่อน # และไม่ต้องการ semicolon ท้ายบรรทัด

สิ่งที่ทำได้ในขั้นตอน preprocessing ได้แก่

  • Inclusion ไฟล์อื่นผ่าน #include directive
  • Definition ของ symbolic constants และ macros ผ่าน #define directive

ผ่าน preprocessor directives บางอย่าง คุณยังสามารถ compile แบบเงื่อนไขได้

หมายเหตุ - ขั้นตอน preprocessing ของโปรแกรม C++ เกิดขึ้นก่อนการคอมไพล์ C++ preprocessor คือโปรแกรมที่รันก่อนที่ source code จะถูกคอมไพล์

คุณเคยเรียนรู้ #include แล้ว ตอนนี้เราจะมุ่งเน้น #define

#define preprocessor อนุญาตให้เรากำหนดชื่อและค่าคงที่เชิงสัญลักษณ์ เช่น

#define PI 3.14159

คำสั่งนี้จะแทนที่ทุกครั้งที่เจอ PI ในโปรแกรมด้วย 3.14159

ตัวอย่าง C++ #define

#include <iostream>
using namespace std;
#define PI 3.14159

int main() {
    int r = 10;
    float cir;
    cir = PI * (r * r);
    cout << "Area of Circle: " << cir << endl;
}

"enum"

enum เป็น user-defined data type ที่เราระบุชุดค่าสำหรับตัวแปร และตัวแปรสามารถรับค่าได้เพียงหนึ่งค่าจากชุดค่าที่เป็นไปได้น้อยๆ เราใช้คีย์เวิร์ด enum เพื่อกำหนด Enumeration

enum direction {East, West, North, South} dir;

ที่นี่ Enumeration ชื่อ direction รับค่าได้เพียงหนึ่งใน 4 ค่าที่ระบุ dir ที่ท้ายคือตัวแปร enum

ตัวอย่างง่ายๆ:

กำหนดค่า West ให้ enum variable dir ตอนแสดงค่า dir จะได้ 1 เพราะค่าเริ่มต้นเรียงจาก 0 คือ East=0, West=1, North=2, South=3

Input: direction {East, West, North, South} dir=West
Output: 1

ตัวอย่าง

#include <iostream>
using namespace std;

enum direction {East, West, North, South} dir;

int main() {
    dir = West;
    cout << dir;
    return 0;
}

วิธีประกาศ enum variable อีกแบบ

#include <iostream>
using namespace std;

enum direction {East, West, North, South};

int main() {
    direction dir;
    dir = South;
    cout << dir;
    return 0;
}

ผลลัพธ์

3

ทำไมต้องใช้ enum ใน C++

ตอนนี้เราเข้าใจ enum และการใช้งานแล้ว มาพูดถึงเหตุผลที่ใช้:

Enums ใช้เมื่อเราคาดหวังว่าตัวแปรจะมีค่าเป็นหนึ่งในชุดค่าที่เป็นไปได้ เช่นตัวแปร dir ที่เก็บทิศทาง เนื่องจากมี 4 ทิศทาง ตัวแปรนี้รับค่าได้แค่ 4 ค่า ถ้าพยายามกำหนดค่าอื่นสุ่มๆ จะเกิด compile-time error เพิ่มการตรวจสอบขณะคอมไพล์และป้องกันข้อผิดพลาดจากค่าคงที่ที่ไม่ถูกต้อง

สถานที่สำคัญอีกแห่งที่ใช้บ่อยคือ switch-case statements ที่ค่าที่ case blocks คาดหวังสามารถกำหนดใน enum ได้ วิธีนี้รับรองว่า enum variable ที่ส่งเข้า switch parentheses ไม่ได้รับค่าสุ่มที่ไม่ควรจะรับ