ทำไม constexpr ควรเป็นแบบคงที่?
Nov 16 2020
หลังจากที่ได้อ่านนี้และนี้ฉันยังคงรู้สึกสับสนเกี่ยวกับชนิดของการแสดงออกนี้:
static constexpr int = 0;
AFAIK ใน C ++:
staticช่วยให้มั่นใจได้ว่าที่อยู่หน่วยความจำตลอดชีวิตพร้อมการดำเนินการทั้งหมดและการเริ่มต้นอย่างปลอดภัยด้วยเธรดพร้อมกันconstexprทำให้มั่นใจได้ว่าการประเมินการรวบรวมเวลาเป็น rvalue ซึ่งหมายความว่าจะไม่มีที่อยู่หน่วยความจำ
พวกเขาดูขัดแย้งกับฉัน staticทำให้มั่นใจได้ว่าตัวแปรจะมีที่อยู่หน่วยความจำเป็นเวลานานในขณะที่constexprทำให้มั่นใจได้ว่ามีสมมติฐานที่ตรงกันข้าม น่าแปลกที่การสนทนาในลิงค์แรกกล่าวถึงสิ่งนี้:
constexpr int x = 3;
const int* p = &x;
เราจะได้รับที่อยู่หน่วยความจำได้xอย่างไรว่าเป็นค่า rvalue หรือไม่?
ใครช่วยอธิบายหน่อย ขอบคุณล่วงหน้า
คำตอบ
1 MSalters Nov 16 2020 at 17:10
staticมีความหมายหลายประการ ในคลาส (ตามความคิดเห็นของคุณ) หมายความว่าสมาชิกนั้นเชื่อมโยงกับคลาสไม่ใช่อินสแตนซ์เฉพาะ (อ็อบเจ็กต์) ของคลาสนั้น
สำหรับ a constexprนั่นเป็นเรื่องที่สมเหตุสมผลมาก โดยทั่วไปแล้วจะเริ่มต้นโดยค่าที่คอมไพเลอร์รู้จักไม่ใช่จากอาร์กิวเมนต์ ctor