Các mã sau đây có vẻ tốt đẹp với tôi:C2070 - bất hợp pháp sizeof toán hạng
#include <stdio.h>
template <typename T>
struct A
{
static float m_kA[];
};
template <typename T>
float A<T>::m_kA[] = {1.0f, 2.0f, 3.0f};
int main()
{
printf("%d\n",
sizeof(A<unsigned int>::m_kA)/
sizeof(A<unsigned int>::m_kA[0]));
return 0;
}
Nhưng khi tôi biên dịch với VC9 tôi nhận được lỗi sau
error C2070: 'float []': illegal sizeof operand
Tôi mong chờ mã này để biên dịch. Tui bỏ lỡ điều gì vậy? Có ai biết một cách để sửa chữa hành vi kỳ lạ này (lưu ý rằng điều tương tự chính xác mà không có mẫu biên dịch tốt và đầu ra 3).
Lưu ý rằng việc xóa mẫu không phải là một tùy chọn, tôi đã tạo ví dụ này để tạo lại sự cố mà tôi đang gặp phải trong mã mà tôi cần loại chứa mảng làm mẫu.
Cảm ơn
FWIW, Biên soạn tiền phạt trên GCC 4.7.1: http://liveworkspace.org/code/19f48dbdb07463b08a310c168ab59a67. Xem đó là một lỗi MSVC khác hay gì đó. – chris
Tôi không nghĩ rằng biểu thức đang tính toán những gì bạn nghĩ rằng nó đang tính toán. – Nobody
@Nobody 'mảng mảng sizeof/sizeof [0]' là một thành ngữ phổ biến tính toán độ dài của mảng.Bạn nghĩ nó tính toán gì, hoặc bạn nghĩ người khác nghĩ nó tính toán cái gì? – hvd