Lợi thế của việc khai báo nó là bạn không thể "vô tình" sửa đổi nó theo cách tối nghĩa để kiểm tra mã có thể bị mất. Ví dụ bằng cách chuyển nó bằng tham chiếu vào một hàm làm thay đổi tham số của nó.
Những bất lợi có thể tranh cãi là bạn không thể (dễ dàng) chuyển nó vào mã mà không tham chiếu không const mà nó không thực sự sửa đổi. Nếu bạn thực sự tin vào C++, đây thực sự là một lợi thế trong ngụy trang, bởi vì nó khuyến khích bạn làm cho phần còn lại của mã của bạn const-correct. Nhưng nếu bạn phải thực hiện các thay đổi nhanh chóng (ví dụ: khi gỡ lỗi) hoặc nếu bạn đã xuất bản API và không thể thay đổi nó, thì có vẻ như bạn thích một ngụy trang tốt.
Nếu chức năng ngắn, thì bạn không thực sự cần "const" để cho bạn biết liệu biến địa phương có được sửa đổi rõ ràng bằng cách gán hay không. Bạn có thể thấy tất cả các công dụng của biến ngay tại đó, trước mặt bạn. Nhưng trong cuộc sống thực, đôi khi các chức năng nhận được lâu; và nơi mọi người sử dụng tham số tham chiếu không const và đôi khi thậm chí là macro; và nơi bạn muốn đọc và hiểu mã càng nhanh càng tốt; sau đó nó có thể giúp một chút.
Tôi có xu hướng sử dụng nó khi tôi nhớ và không đổ mồ hôi nếu tôi quên. Tôi nhận được hầu hết sử dụng ra khỏi nó khi tôi cần phải loại bỏ const từ một biến. Điều đó nói với tôi rằng quan niệm ban đầu của tôi về biến đó là sai, và tôi cần phải kiểm tra cẩn thận rằng không có biểu thức nào sử dụng nó thực sự dựa vào nó không thay đổi. Cho rằng C + + có từ khóa const, nếu bạn đang đi để viết mã dựa trên một biến không thay đổi, bạn cũng có thể nhận được trình biên dịch về phía bạn.
Thường không đáng lo ngại về tối ưu hóa trình biên dịch. Một trình biên dịch tốt (gcc) có thể nói rằng nếu bạn không sửa đổi một biến, và không tham chiếu đến nó, thì nó có thể áp dụng các tối ưu thích hợp cho dù bạn đánh dấu nó hay không.
Nguồn
2009-03-24 12:48:19
Trình biên dịch có đủ thông minh để phát hiện điều này không? – erikkallen
@erikkallen: Vâng, tất nhiên rồi. Đó là lý do tại sao hai người lại khác nhau. Nếu trình biên dịch không thể phát hiện nó, thì chúng sẽ không thể được xử lý khác nhau. –
@Tomalak: Có, nhưng trình biên dịch cũng có thể đủ thông minh để biết rằng giá trị không bao giờ được sửa đổi sau khi đóng được tạo. – erikkallen