Constructor ของ std :: span ทั้งหมดได้รับการประกาศให้เป็น constexpr แต่ฉันไม่สามารถทำให้พวกมันทำงานในบริบทของ constexpr ได้ การไม่แสดงข้อคิดเห็น constexpr ด้านล่างใด ๆ จะส่งผลให้เกิดข้อผิดพลาดในการรวบรวม
#include <array>
#include <span>
int main()
{
constexpr int carray[3] = { 0, 1, 2 };
constexpr std::array<int, 3> array{ 0, 1, 2 };
using S = std::span<const int, 3>;
/*constexpr*/ S span1{ array.data(), 3 };
/*constexpr*/ S span2{array.begin(), array.end()};
/*constexpr*/ S span3{carray};
/*constexpr*/ S span4{array};
}
ในความเป็นจริงเป็นไปได้ที่จะสร้าง constexpr span type หรือไม่เนื่องจากดูเหมือนว่าคอนสตรัคเตอร์จะไม่สามารถประเมินได้ ณ เวลารวบรวมเมื่อต้องเริ่มต้นตัวชี้หรือการอ้างอิง
การไม่ใส่เครื่องหมายความคิดเห็นไว้ห้ามลบออก
—
Andreas Loanjoe
คุณกำลังเริ่มต้นช่วงรันไทม์ฉันหมายถึงการเริ่มต้นช่วง constexpr
—
Andreas Loanjoe
Doh ไม่แน่ใจว่าทำไมฉันทำอย่างนั้น ไม่เป็นไร
—
NathanOliver
แปลกไม่เห็นว่าทำไมมันจะมีความจำเป็นช่วงเท่านั้นอาศัยอยู่ภายในขอบเขตท้องถิ่นต่อไป ...
—
Andreas Loanjoe
มีความเกี่ยวข้องอย่างใกล้ชิด: stackoverflow.com/q/57545503/2069064
—
Barry