2011-09-18 25 views
6

Từ 4,1/2vế trái để chuyển đổi rvalue

Giá trị chứa trong các đối tượng thể hiện bằng vế trái là kết quả rvalue. Khi một chuyển đổi lvalue-to-rvalue xảy ra trong toán hạng của sizeof (5.3.3) giá trị chứa trong đối tượng được tham chiếu không được truy cập, vì toán tử đó không đánh giá toán hạng của nó.

Ngoài sự tò mò, tôi đã tự hỏi, điều tương tự cũng áp dụng cho câu lệnh if, for, while, tức là giá trị được chuyển thành giá trị khi kết quả của câu lệnh được đánh giá?

Trả lời

7

Có. Nếu không có chuyển đổi lvalue-to-rvalue, nó không thể đọc được là giá trị.

Nói nhẹ nhàng, hãy suy nghĩ về lvalue làm một số loại vùng chứa và rvalue làm giá trị chứa trong vùng chứa.

C++ 03, phần §3.10/7 lần đọc,

Bất cứ khi nào một giá trị trái xuất hiện trong một bối cảnh mà một rvalue dự kiến, vế trái được chuyển đổi sang một rvalue; xem 4.1, 4.2 và 4.3.

đọc nó cùng với, §4.1/2 (báo giá của bạn),

Giá trị chứa trong các đối tượng thể hiện bằng vế trái là kết quả rvalue.

chủ đề liên quan:

+0

Về mặt tiêu chuẩn, Điều đó có nghĩa là nó có chứa một giá trị rexue 'không? Tôi nhớ đọc nó nhưng tôi không chắc chắn nếu tôi nhận được nó đúng. – parc84

+0

@ parc84: Đã thêm báo giá từ thông số kỹ thuật. – Nawaz

3

Câu trả lời là có.

Khi giá trị boolue được mong đợi, chuyển đổi cũng được áp dụng. Hãy để thử nghiệm là một biến để xem ví dụ:

if(test) 

Rvalue của thử nghiệm, đúng hay sai, được đánh giá bên trong if.

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