Đâ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<<cout
và cout<<&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ì?
Trả lời
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
.
Vì 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.
cout<<&cout
đang chuyển địa chỉ cout
vào luồng.
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*
.
Liên kết bị hỏng. – Destructor
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
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
.
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); }
- 1. cout << stringstream
- 2. cout << "привет"; hoặc wcout << L "привет";
- 3. "<<" and ">>" có nghĩa là gì trong C++ cho cout/cin?
- 4. Sử dụng "<<" hoặc "+" để đặt các chuỗi lại với nhau khi sử dụng "cout"
- 5. C++ chaining của toán tử << cho std :: cout như sử dụng
- 6. cout << thứ tự của cuộc gọi đến chức năng nó in?
- 7. làm thế nào để viết một lớp logger với cout giao diện phong cách (logger << "Lỗi:" << val << endl;)
- 8. std :: chrono và cout
- 9. Sự khác nhau giữa <%: và <% = và <% # trong aspx là gì?
- 10. ‘cout’ không có tên là
- 11. C++ giá trị hex cout?
- 12. printf vs std :: cout
- 13. hành vi cout lạ
- 14. Chuyển hướng std :: cout
- 15. Tắt dấu phẩy trong cout?
- 16. Tại sao std :: cout thay vì chỉ đơn giản là cout?
- 17. tùy chỉnh cout
- 18. Lập trình bỏ qua Cout
- 19. cout - những gì nó đại diện cho?
- 20. BOOST luồng: hành vi cout
- 21. Unbuffered đầu ra với cout
- 22. Sự khác nhau giữa <? super E> và <? extends E> là gì?
- 23. cout không in unsigned char
- 24. Sự khác nhau giữa "<>" và "! =" Là gì?
- 25. Có thể cout vào terminal trong khi chuyển hướng cout sang outfile không?
- 26. Sự khác nhau giữa HashSet <T> và Danh sách <T> là gì?
- 27. Sự khác nhau giữa <% %> và <%=%> là gì?
- 28. Sự khác nhau giữa <% # và <% = thẻ mở là gì?
- 29. XSLT: sự khác nhau giữa <copy-of> và <apply-templates> là gì?
- 30. Sự khác nhau giữa Danh sách <string> và IEnumerable <String> là gì?
Đây là ví dụ cho mọi người. http://ideone.com/0FZXZ –
Điều gì thực sự * là * câu hỏi? – Puppy
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 đó. –