Theo tiêu chuẩn ISO C++ năm 2003, đó không phải là biểu thức hằng số tách rời . Trích dẫn phần 5,19 của tiêu chuẩn:
An integral constant-expression can involve only literals (2.13), enumerators, const
variables or static data members of integral or enumeration types initialized with constant expressions (8.5), non-type tem-plate parameters of integral or enumeration types, and sizeof
expressions. Floating literals (2.13.3) can appear only if they are cast to integral or enumeration types.
Bạn có thể thay đổi điều này:
const double rotationStep = 0.001;
const int N = 2*int(M_PI/rotationStep) + 3;
này:
const int inverseRotationStep = 1000;
const int N = 2*int(M_PI)*inverseRotationStep + 3;
(Đó là giả định M_PI
được định nghĩa ở đâu đó; nó không quy định trong tiêu chuẩn , nhưng nó là một phần mở rộng phổ biến.)
Tiêu chuẩn ISO C++ 2011 loo cảm nhận điều này một chút. 5.19p3 (trích dẫn dự thảo N3337) nói:
An integral constant expression is a literal constant expression of integral or unscoped enumeration type.
tôi nghĩ2*int(M_PI/rotationStep) + 3
, và do đó N
, đủ điều kiện theo quy định mới, nhưng nó có khả năng biên dịch của bạn vẫn chưa thực hiện chúng.
Nguồn
2012-06-29 22:50:30
Vui lòng, bạn có thể xóa mã thông báo 'tĩnh' ra khỏi mã của bạn và biên dịch lại không? – higuaro
@ h3nr1x: Đó là hành vi được xác định thực hiện (khi biểu thức được đánh giá là). –
sẽ không biên dịch nếu không có từ khóa tĩnh – user765269