xem xét mã này thử nghiệm tầm thường:Tại sao thuộc tính constexpr không hoạt động khi áp dụng cho một phương thức tĩnh?
class Test
{
public:
Test() {/* empty */}
private:
enum {BLAH = 42};
static constexpr int Magic() {return BLAH*4;}
float f[Magic()];
};
int main(int argc, char ** argv)
{
Test t;
return 0;
}
Khi tôi cố gắng biên dịch nó (dưới hệ điều hành MacOS/X sử dụng kêu vang ++ từ XCode mới nhất), tôi có được điều này lỗi biên dịch:
Jeremys-Mac-Pro:~ jaf$ clang++ -std=c++11 ./test.cpp
./test.cpp:11:14: error: fields must have a constant size: 'variable length
array in structure' extension will never be supported
float f[Magic()];
thể bất cứ ai giải thích tại sao đây là lỗi? Để so sánh, nếu tôi di chuyển phương thức Magic() ra khỏi lớp Test và làm cho nó trở thành một hàm tự do, nó biên dịch như mong đợi, nhưng tôi thực sự không muốn làm điều đó vì tôi muốn giữ Magic() và BLAH riêng tư đối với lớp Kiểm tra nếu có thể.
(Lưu ý: Tôi không cố gắng sử dụng các mảng chiều dài thay đổi ở đây, đúng hơn Tôi đang cố gắng để khai báo một mảng có kích thước được xác định bởi việc tính toán của một hàm tại thời gian biên dịch)