Tất cả các hàm tạo của std :: span đều được khai báo constexpr, tuy nhiên tôi dường như không thể khiến bất kỳ cái nào trong số chúng hoạt động trong ngữ cảnh constexpr. Việc bỏ sót bất kỳ constexpr nào dưới đây sẽ dẫn đến lỗi biên dịch.
#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};
}
Trên thực tế có thể tạo ra một kiểu nhịp constexpr không, vì có vẻ như các hàm tạo không bao giờ được đánh giá tại thời điểm biên dịch khi chúng phải khởi tạo một con trỏ hoặc tham chiếu?
Uncomment các constexprs không loại bỏ chúng.
—
Andreas Loanjoe
Bạn đang khởi tạo một khoảng thời gian chạy tôi có nghĩa là khởi tạo một khoảng constexpr
—
Andreas Loanjoe
Doh. Không chắc chắn tại sao tôi làm điều đó. không bao giờ
—
NathanOliver
Thật kỳ lạ, đừng hiểu tại sao điều đó lại cần thiết, nhịp chỉ sống trong phạm vi địa phương ...
—
Andreas Loanjoe
Liên quan chặt chẽ: stackoverflow.com/q/57545503/2069064
—
Barry