2011-10-27 31 views
8

Tôi muốn biết làm thế nào có thể thay đổi ảnh hưởng đến một container (bản đồ, vector, danh sách, ...). Ngoài ra, tôi phải ghi nhớ điều gì?C++ Ảnh hưởng đến từ khóa có thể thay đổi đến hiệu suất của vùng chứa như thế nào?

+0

Mọi người sẽ viết sách về từ khóa có thể thay đổi nói chung, có thể bạn có thể thu hẹp, với một chút mã hiển thị nội dung trong trường hợp cụ thể của bạn. – PlasmaHH

Trả lời

10

mutable, như const, chỉ là một công cụ biên dịch. Nó chỉ cho phép bạn sửa đổi biến đó trong một ngữ cảnh không đổi. Trong thời gian chạy, không có sự khác biệt nào mà bạn khai báo là container mutable hay không.

class Foo{ 
    mutable int i; 

public: 
    void foo() const{ 
    // constant context, but you can modify `i` 
    i = 5; 
    } 
}; 
+2

Nó cũng có thể được sử dụng làm gợi ý cho trình tối ưu hóa – Dani

+2

Nó ảnh hưởng đến những gì trình tối ưu hóa có thể thực hiện. –

+1

Có (ít nhất là trong lý thuyết) một số cơ hội tối ưu hóa bạn có thể làm trên các đối tượng bất biến (theo nghĩa rộng nhất), có thể phá vỡ mã của bạn nếu áp dụng cho các đối tượng 'const' với các thành viên' mutable'. Tuy nhiên, tôi không đủ quen thuộc với việc triển khai trình biên dịch để cho biết mức độ mà chúng được triển khai. Tuy nhiên, câu hỏi là hợp lệ cho chính xác lý do này. – bitmask

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