Có, có sự khác biệt. Trong C, biến số const
vẫn không được coi là hằng số biên dịch đúng thời gian (chính thức, nó không được phép là một phần của constant expression
), vì vậy điều này không được phép. Tuy nhiên, lưu ý rằng mặc dù C không yêu cầu trình biên dịch cho phép nó, nhưng tiêu chuẩn không cho phép thực hiện chấp nhận các biểu thức khác của các biểu thức không đổi, do đó, nó miễn phí chấp nhận nó nếu nó chọn.
Trong C++, biến số const
được coi là hằng số, vì vậy nó được cho phép.
Điều thú vị là khoảng ngược lại là đúng khi bạn sử dụng một giá trị thông qua như là một tham số chức năng:
void f(int size) {
int array[size];
}
Đây là phép trong C, nhưng không phải trong C++. Đây là mảng variably modified
; thông báo lỗi mà bạn đang nhận được về cơ bản đang cố gắng cho bạn biết rằng chúng chỉ được phép bên trong các hàm.
Nguồn
2011-11-03 22:37:07
Trong C, bạn có thể chuyển kích thước của mảng cho một hàm? Đã học ! Cảm ơn! – Rich
@Rich: có, nhưng chỉ khi trình biên dịch của bạn phù hợp với C99 (ít nhất là trong khía cạnh này) - điều này đã không được bao gồm trong C89/90 (mặc dù nó là một phần mở rộng khá phổ biến ngay cả với trình biên dịch cũ). –