"Giá trị" của mẫu cần phải có mặt tại thời gian biên dịch.
template<int x> struct X {};
Ngay cả khi bạn không ràng buộc tham chiếu hoặc vượt qua con trỏ tại đây, trình biên dịch phải biết giá trị của các phần tử được chuyển vào lúc biên dịch.
Thay thế int &x
bằng int x
là mục đích tại đây. Nội dung về int & được trả lời chính xác. Tôi chỉ muốn nói rằng nó áp dụng cho tất cả các đối số mẫu không được nhập.
- Các "giá trị" của một tham chiếu là một tài liệu tham khảo (thực hiện phụ thuộc thực sự là một con trỏ trong hầu hết trong số họ)
- Địa chỉ của đối tượng phải được biết tại thời gian biên dịch
- Các " giá trị "của một con trỏ
template<int*>
là một địa chỉ ...
- ... mà tất nhiên phải được biết ở đây, tất nhiên.
- Các "giá trị" của một giá trị kiểu là giá trị riêng của mình mà cũng phải được biết tại thời gian biên dịch
X<local_var> x; // will not work, local_var does not exist at compile time
X<1> x; // works since 1 is known
Tôi chỉ muốn (ngoài Andy câu trả lời) ngăn chặn bất kỳ kết luận nào đề xuất sử dụng loại giá trị thay vì tham chiếu.
Đối số mẫu là một phần của * loại *. Loại 'x' sẽ là gì trong ví dụ của bạn? –