2011-09-20 48 views
8

Đây có thể là câu hỏi cho người mới bắt đầu và hiểu cách thức hoạt động của cout có thể là chìa khóa ở đây. Nếu ai đó có thể liên kết với một lời giải thích tốt, nó sẽ là tuyệt vời. cout<<coutcout<<&cout giá trị hex in được phân tách bằng 4 trên máy x86 linux.Sự khác nhau giữa cout << cout và cout << & cout trong C++ là gì?

+0

Đây là ví dụ cho mọi người. http://ideone.com/0FZXZ –

+1

Điều gì thực sự * là * câu hỏi? – Puppy

+3

Tại sao bạn lại hỏi điều này. Câu hỏi không có nghĩa là họ không có logic trong việc làm điều đó. –

Trả lời

16

cout << cout tương đương với cout << cout.operator void *(). Đây là thành ngữ được sử dụng trước C++ 11 để xác định xem iostream có ở trạng thái lỗi hay không và được triển khai trong std::ios_base; nó thường trả về địa chỉ của static_cast<std::ios_base *>(&cout).

cout << &cout in địa chỉ của cout.

std::ios_base là lớp cơ sở ảo là cout, nó có thể không nhất thiết phải tiếp giáp với cout. Đó là lý do tại sao nó in một địa chỉ khác.

0

cout<<&cout đang chuyển địa chỉ cout vào luồng.

4

cout << &cout đang di chuyển cout địa chỉ cout.

cout << cout đang in giá trị của việc đúc hoàn toàn cout tới con trỏ void* bằng cách sử dụng operator void*.

+0

Liên kết bị hỏng. – Destructor

+0

Tôi đã xóa liên kết vì tôi không thể tìm thấy sự thay thế phù hợp. Cảm ơn – GWW

5

cout << cout đang sử dụng chuyển đổi được tích hợp thành void* tồn tại cho mục đích kiểm tra boolean. Đối với một số lý do không thú vị, việc triển khai của bạn sử dụng địa chỉ là 4 byte vào đối tượng std::cout. Trong C++ 11, chuyển đổi này đã được gỡ bỏ, và điều này không nên biên dịch.

cout << &cout đang in địa chỉ của đối tượng std::cout.

3

Như đã nêu, cout << cout sử dụng chuyển đổi void* cung cấp để thử nghiệm bool (while (some_stream){ ... }, vv)

It in giá trị & cout +4 vì việc chuyển đổi được thực hiện trong việc thực hiện cơ sở, và phôi để riêng của mình loại, đây là from libstdc++:

operator void*() const 
{ return this->fail() ? 0 : const_cast<basic_ios*>(this); } 
Các vấn đề liên quan