2010-11-15 36 views
5

Tôi xin lỗi nếu điều này đã được yêu cầu trước đó. Kết quả tìm kiếm của tôi không trả lời một câu hỏi tương tự.Phương pháp Const truy cập các biến tĩnh

Đây là câu hỏi khái niệm. Theo MSDN và những người khác cũng như:

Một chức năng thành viên liên tục không thể sửa đổi bất kỳ thành viên dữ liệu hoặc gọi bất kỳ chức năng thành viên mà không phải là hằng số

Vậy tại sao chúng ta lại được phép truy cập các biến thành viên tĩnh từ một phương pháp const?

+0

Nếu bạn chỉ đọc các biến thành viên thì bạn không thay đổi chúng và không vi phạm yêu cầu const phải không? – Jay

+0

@Tôi cũng có thể thay đổi nó, không chỉ đọc nó – Samaursa

Trả lời

9

C++ chuẩn nói này về const chức năng thành viên:

Nếu chức năng thành viên được khai báo const, loại này là const X*, [...]

Trong một hàm const thành viên, đối tượng mà hàm được gọi được truy cập thông qua đường dẫn truy cập const; do đó, một hàm thành viên const sẽ không sửa đổi đối tượng và các thành viên dữ liệu không tĩnh của nó.

Vì vậy, bạn thấy rằng chỉ các thành viên dữ liệu không tĩnh là một phần của 'constness' của hàm thành viên.

Tuy nhiên, tôi nghĩ rằng quan trọng hơn nó chỉ ra rằng cách tốt để hiểu những gì đang xảy ra với các hàm thành viên const là nó làm cho con trỏ this tiềm ẩn trỏ đến const.

Vì các thành viên tĩnh không cần truy cập thông qua con trỏ this (ngầm hoặc rõ ràng), quyền truy cập vào chúng không phải là const đủ điều kiện.

+1

Cảm ơn bạn rất nhiều vì đã trả lời. Sau một vài suy nghĩ, tôi quyết định kiểm tra câu trả lời đúng của bạn vì nó giải thích chi tiết hơn mà không để lại bất kỳ nghi ngờ nào, đặc biệt là phần: _ ".. một cách hay để hiểu chuyện gì đang xảy ra ..." _ – Samaursa

13

Vì chúng không phải là một phần của đối tượng.

+1

đơn giản nhưng quá điểm! – thecoshman

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