2011-11-08 32 views
5

Tại sao đối tượng volatile không gọi là chức năng thành viên không phải là volatile?lý do tại sao không thể là một đối tượng dễ bay hơi gọi hàm thành viên không linh hoạt

Trong trường hợp const, việc gọi hàm thành viên không phải là const vi phạm constness đối tượng và do đó bị cấm. Nhưng lý do tại sao trong trường hợp volatile?

+1

Vì bạn đang cố gắng vi phạm chính xác dễ bay hơi ... –

+2

và tôi chỉ phát hiện thấy đảo ngược –

Trả lời

4

Trong trường hợp const, có nghĩa là việc gọi hàm không phải thành viên sẽ vi phạm const-ness của đối tượng và do đó bị cấm. Nhưng tại sao trong trường hợp dễ bay hơi?

Nó cũng tương tự như dễ bay hơi. Dễ bay hơi có nghĩa là mọi truy cập vào một đối tượng là một tác dụng phụ có thể nhìn thấy và không thể loại bỏ được. Nếu bạn gọi một phương thức không bay hơi trên một đối tượng dễ bay hơi, bạn sẽ vi phạm thuộc tính này (vì phương thức nonvolatile sẽ xử lý đối tượng giống như một đối tượng bình thường). Do đó, điều đó là không thể.

2

Bộ định tính volatile hoạt động nhiều theo cách tương tự như const hoạt động. Để xem những gì có thể được thực hiện nhờ điều này, hãy xem this Alexandrescu article. Bài viết đó cũng sẽ cung cấp cho bạn thông tin chi tiết về số lý do tại sao.

+0

nó là một bài viết năm 2001 và tất cả tôi đọc bây giờ là mọi người tư vấn chống lại biến động cho mục đích quan trọng/đa luồng và thích sử dụng mutexes . Ví dụ: https://www.securecoding.cert.org/confluence/display/seccode/POS03-C.+Do+not+use+volatile+as+a+synchronization+primitive – Nikko

+0

@Nikko: Có vẻ như bạn đã không làm vậy ' t đọc nhiều hơn tiêu đề của bài viết được tham chiếu trong câu trả lời. Đọc bài viết * đầy đủ *. – ybungalobill

4

Từ tiêu chuẩn:

7.1.5.1. Nếu một nỗ lực được thực hiện để đề cập đến một đối tượng được xác định với một loại biến dạng bay hơi qua việc sử dụng một lvalue với loại không bay hơi-quailified, hành vi của chương trình là không xác định.

Tôi đoán trình biên dịch của bạn sẽ đăng lỗi để ngăn hành vi không xác định. Tiêu chuẩn nêu rõ nên đủ lý do.

+0

Tôi nghĩ câu hỏi là "tại sao" –

+0

phát hiện thú vị từ thông số kỹ thuật. – iammilind

+0

@ TomalakGeret'kal vì tiêu chuẩn nói như vậy :) –

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