ทำไม 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