Tôi dường như thiếu một thứ gì đó khá cơ bản. Tôi đang cố gắng sử dụng các thành viên mảng const tại thời gian biên dịch.Hằng số mảng thời gian biên dịch
const int list[3] = { 2, 5, 7 };
const int a = list[2]; // this doesn't error?
template<int N1, int N2>
struct tmax {
enum { value = ((N1 > N2) ? N1 : N2) };
};
const int b = tmax<2,4>::value;
const int c = tmax<list[0],list[1]>::value; // error is here
int main()
{
return 0;
}
Lỗi:
prog.cpp:10:24: error: 'list' cannot appear in a constant-expression
prog.cpp:10:30: error: an array reference cannot appear in a constant-expression
Đây là relevent IDEOne link
Vậy tại sao không làm việc này? Tôi đang thiếu gì? Tôi nên làm gì khác?
Tôi đã tìm ra constexpr sẽ hữu ích, và bây giờ tôi thấy tôi thấy nó có sự chấp nhận rộng hơn tôi nghĩ. Với điều đó đã nói, một chút giải thích về lý do tại sao việc khai báo const int một tác phẩm nhưng danh sách [1] đặc biệt sẽ không được đánh giá cao. Cảm ơn bạn. –
OK, vì vậy studio trực quan 2012 không có kế hoạch hỗ trợ constexpr. Bất cứ ai có bất kỳ giải pháp khác? Tôi KHÔNG PHẢI sử dụng nó cho việc này, nhưng nó sẽ rất tuyệt. –
@ std''OrgnlDave Tôi đã thêm nhiều chẩn đoán trình biên dịch giải thích chính xác lý do danh sách [1] không phải là biểu thức liên tục. – bames53