constexpr และเวลาคอมไพล์
คำนวณค่าขณะคอมไพล์
constexpr และเวลาคอมไพล์ เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
ความหมายของ constexpr
constexpr บอกคอมไพเลอร์ว่าค่าหรือฟังก์ชันนั้นสามารถประเมินผลได้ในเวลาคอมไพล์ ทำให้เกิดค่าคงที่จริงที่คำนวณได้ระหว่างคอมไพล์
#include <iostream>
int main() {
constexpr int size = 4 * 4; // computed at compile time
int arr[size];
std::cout << sizeof(arr) / sizeof(int) << "\n";
}ฟังก์ชัน constexpr
ฟังก์ชัน constexpr สามารถทำงานระหว่างคอมไพล์ได้เมื่อได้รับอาร์กิวเมนต์คงที่ และจะทำงานขณะรันไทม์ในกรณีอื่น
#include <iostream>
constexpr int square(int x) { return x * x; }
int main() {
constexpr int s = square(5); // compile time
int n = 6;
std::cout << s << " " << square(n) << "\n"; // second at runtime
}ค่าคงที่ระหว่างคอมไพล์ในอาร์เรย์
เนื่องจากค่าของ constexpr เป็นที่ทราบในเวลาคอมไพล์ จึงสามารถใช้กำหนดขนาดอาร์เรย์และใช้เป็นอาร์กิวเมนต์ของแม่แบบได้
constexpr กับ const
const หมายถึง "ไม่สามารถเปลี่ยนแปลงได้" ส่วน constexpr หมายถึง "เป็นที่ทราบในเวลาคอมไพล์" ทุกค่า constexpr จะเป็นค่าคงที่โดยนัย แต่ไม่ใช่ค่าคงที่ทุกค่าจะเป็น constexpr
#include <iostream>
int main() {
int x;
std::cin >> x;
const int a = x; // const but runtime value
constexpr int b = 10; // compile-time constant
std::cout << b << "\n";
}constexpr แบบเรียกซ้ำ
ฟังก์ชัน constexpr สามารถเรียกตัวเองซ้ำได้ ทำให้คอมไพเลอร์คำนวณสิ่งต่าง ๆ เช่น แฟกทอเรียลได้ก่อนที่โปรแกรมจะเริ่มทำงาน
#include <iostream>
constexpr long factorial(int n) {
return n <= 1 ? 1 : n * factorial(n - 1);
}
int main() {
constexpr long f = factorial(5); // 120 at compile time
std::cout << f << "\n";
}constexpr ที่มีความสามารถมากขึ้นใน C++ สมัยใหม่
ตั้งแต่ C++14 เป็นต้นมา ฟังก์ชัน constexpr สามารถมีลูป ตัวแปรเฉพาะที่ และแขนงการทำงานได้ ทำให้คุณคำนวณค่าคงที่ซับซ้อนได้ระหว่างคอมไพล์
#include <iostream>
constexpr int sumTo(int n) {
int total = 0;
for (int i = 1; i <= n; ++i) total += i;
return total;
}
int main() {
constexpr int s = sumTo(100);
std::cout << s << "\n";
}ตัวแปร constexpr ต้องเริ่มต้นค่าระหว่างคอมไพล์
ตัวแปรที่ประกาศเป็น constexpr ต้องมีค่าเริ่มต้นที่สามารถประเมินผลได้ระหว่างคอมไพล์ มิฉะนั้นโปรแกรมจะคอมไพล์ไม่ผ่าน
ประโยชน์ของการคำนวณระหว่างคอมไพล์
การคำนวณระหว่างคอมไพล์หมายถึงไม่มีต้นทุนขณะรันไทม์ สามารถใช้ค่าในบริบทที่ต้องการค่าคงที่ และตรวจพบข้อผิดพลาดได้เร็วขึ้น
constexpr กับแม่แบบ
ค่า constexpr ทำงานร่วมกับแม่แบบและ std::array ได้เป็นธรรมชาติ เพราะขนาดและพารามิเตอร์ต้องเป็นค่าคงที่ระหว่างคอมไพล์
เมื่อเปลี่ยนไปทำงานขณะรันไทม์
หากฟังก์ชัน constexpr ได้รับอาร์กิวเมนต์ที่ไม่ใช่ค่าคงที่ ฟังก์ชันนั้นจะทำงานขณะรันไทม์เหมือนฟังก์ชันทั่วไป โดยไม่ถือเป็นข้อผิดพลาด
เลือกใช้ constexpr สำหรับค่าคงที่
ใช้ constexpr สำหรับค่าคงที่จริง เช่น ขนาด การคำนวณทางคณิตศาสตร์ และตารางค้นหา คำนี้สื่อความหมายได้ชัดเจนกว่า const และเปิดใช้การรับประกันระหว่างคอมไพล์
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับ constexpr ของคุณ
สรุปทบทวน
คุณได้เรียนรู้ว่า constexpr เปิดให้ประเมินผลตัวแปรและฟังก์ชันในเวลาคอมไพล์ แตกต่างจาก const ซึ่งเพียงห้ามการแก้ไขค่า รองรับลูปและการเรียกซ้ำใน C++ สมัยใหม่ และเปลี่ยนไปทำงานขณะรันไทม์เมื่อได้รับอินพุตที่ไม่ใช่ค่าคงที่
คำถามที่พบบ่อย
บทเรียน “constexpr และเวลาคอมไพล์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “constexpr และเวลาคอมไพล์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “constexpr และเวลาคอมไพล์”
คำนวณค่าขณะคอมไพล์ คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “constexpr และเวลาคอมไพล์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม
ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ตัวแปรและพารามิเตอร์ const
- ฟังก์ชันสมาชิก const
- constexpr และเวลาคอมไพล์
- consteval และ constinit