2015-06-13 19 views

Trả lời

10

Đó là viết tắt cho một cái gì đó như thế này:

template <typename T, size_t N> 
constexpr size_t size_of(T (&anonymous_variable)[N]) { 
    return N; 
} 

Trong chức năng, bạn không thực sự cần tên của biến, chỉ là mẫu trích trên N - vì vậy chúng tôi chỉ có thể chọn để bỏ qua nó. Các dấu ngoặc đơn là cú pháp cần thiết để truyền mảng theo tham chiếu - bạn không thể chuyển vào mảng theo giá trị.

+0

Cảm ơn! Mẫu này có tên không? – Phonon

+0

@Phonon Không phải là tôi biết. – Barry

+3

@Phonon: Đó là một cú pháp tiêu chuẩn tồn tại vì C C. cổ không có tham chiếu, nhưng các kiểu con trỏ mảng đã được mô tả là 'T (*) [N]' từ đầu. Thay thế '*' bằng '&' ngoài điểm. – AnT

4

này được đi qua một mảng như một tham số bằng cách tham khảo:

template <typename T, size_t N> 
constexpr size_t size_of(T (&)[N]) { 
    return N; 
} 

Như bạn không thể vượt qua một mảng như thế này:

template <typename T, size_t N> 
constexpr size_t size_of(T[N]) { 
    return N; 
} 

Nếu mảng được đặt tên, nó sẽ trông như thế :

template <typename T, size_t N> 
constexpr size_t size_of(T (&arrayname)[N]) { 
    return N; 
} 
+0

Tại sao khối giữa là bất hợp pháp? – Phonon

+0

@Phonon mảng không thể được thông qua bằng cách tham chiếu; chúng được truyền theo giá trị. – Joe

Các vấn đề liên quan