2013-05-24 30 views
5

Tôi yêu "const". Tôi muốn mọi biến và phương thức mà "phải là const" IS "const". Vấn đề là liệu một biến hay phương thức "phải là const" phụ thuộc vào các phương thức/biến tiếp tục trong cây gọi. Có một số công cụ, hoặc một số quá trình, để kiểm tra tĩnh một cơ thể của mã và làm "dưới lên en-const-ification"?tạo biến C++ const

+7

Bạn không nên làm điều gì đó 'const' chỉ vì bạn tình cờ chỉ sử dụng các hàm thành viên/hàm' const' có 'const &'. Bạn nên làm cho nó 'const' bởi vì bạn biết nó khái niệm không nên thay đổi. – BoBTFish

Trả lời

6

Tôi không biết câu trả lời cho câu hỏi của bạn, nhưng tôi muốn tranh luận chống lại tuyên bố rằng

liệu một biến hoặc phương pháp "nên được const" phụ thuộc vào phương pháp/biến tiếp tục xuống trong cây gọi

Thực ra, const phải ở mức hợp lý. I E. bạn nên đánh dấu một cái gì đó const nếu nó không nên được thay đổi một cách hợp lý. Nếu sau này, bạn sẽ nhận được một lỗi biên dịch và sẽ cần phải xem xét lại sự thay đổi hoặc giả định ban đầu của bạn.

Quy tắc là:

nếu có điều gì là const, nó không nên được thay đổi

hơn

nếu có điều gì là không thay đổi trên thực tế, sau đó chúng ta hãy làm cho nó const

0

Có nhiều loại tĩnh khác nhau công cụ phân tích có thể làm điều đó. Gimpel Flexelint xuất hiện trong đầu bạn.

Đã nói điều đó, có thể nhận được kết quả dường như không hoàn toàn chính xác. Ví dụ: đưa ra điều này:

class Wibble { 
    Some_Implementation_Detail *stuff; //PIMPL idiom 
    public: 
    void set_something(int a) { stuff->set(a); } 
}; 

sau đó set_something có thể được thực hiện const. Đây là kỹ thuật chính xác, nhưng không phải là rất hữu ích, bởi vì nó không hợp lý const ở tất cả trong trường hợp này.

Các vấn đề liên quan