2013-01-16 16 views
5

Tôi đang đọc C++ Primer, 5th Ed., Trên p. 71 họ lần đầu tiên cung cấp cho mã ví dụ này:decltype - "ngữ cảnh duy nhất trong đó một biến được định nghĩa là tham chiếu không được coi là một từ đồng nghĩa cho đối tượng mà nó tham chiếu"?

const int ci = 0, &cj = ci; 
decltype(ci) x = 0; 
decltype(cj) y = x; 
decltype(cj) z; //error 

Sau đó, họ nói:

Điều đáng chú ý là decltype là bối cảnh duy nhất mà một biến định nghĩa là một tài liệu tham khảo không được đối xử như một từ đồng nghĩa với đối tượng mà nó đề cập đến.

Chúng có ý nghĩa gì? Tôi không hiểu. Các y có đề cập đến x. Vì vậy, những gì bắt?

+0

Tiêu đề hay, tìm kiếm đầu tiên tìm thấy điều này :-) Công việc tốt – Des1gnWizard

Trả lời

9

Tôi tin rằng họ đang cố gắng nói rằng decltype(cj) sẽ không cung cấp cho bạn loại đối tượng mà cj đề cập đến (nghĩa là, const int) nhưng sẽ cung cấp cho bạn loại cj chính nó. Vì vậy, y sẽ là const int&.

Trường hợp so sánh này là khi sử dụng tên của tham chiếu trong biểu thức. Tiêu chuẩn cho biết:

Nếu một biểu thức ban đầu có loại “tham chiếu đến T” (8.3.2, 8.5.3), loại được điều chỉnh thành T trước khi phân tích thêm. Biểu thức chỉ định đối tượng hoặc hàm được ký hiệu bởi tham chiếu và biểu thức là một giá trị hoặc một xvalue, tùy thuộc vào biểu thức.

Tức là khi sử dụng tên của tham chiếu trong biểu thức, đó không phải là tham chiếu được thực hiện trên đối tượng mà nó đề cập đến. Đây là những gì cung cấp cho một loại tài liệu tham khảo các chức năng của một "bí danh".

+0

decltype luôn đề cập đến loại cơ bản. Bạn sẽ phải khai báo cụ thể đối tượng của bạn là một tham chiếu được một trình biên dịch đưa ra (như trong bạn luôn nhận được một giá trị lvalue; ngay cả khi bạn dự định nhận được một giá trị). Nhưng, vâng vâng. +1. – TheBlueCat

+0

Giải thích hay. Cám ơn – Des1gnWizard

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