Điều này đơn giản có nghĩa là bất cứ điều gì chúng ta làm với đối tượng như cout được đồng bộ với stdout (và ngược lại?). Cái đó chính xác có nghĩa gì. Stdio có đồng bộ với stdout không?Ý nghĩa chính xác của iostream là đồng bộ với ios_base :: sync_with_stdio
Trả lời
Các ostream mặc định được sử dụng bởi std :: cout và stdio (như printf) là thiết bị xuất chuẩn, nhưng nó không nhất thiết phải như vậy.
Đầu ra có thể được chuyển hướng đến đích khác. Tham chiếu này: http://www.tldp.org/LDP/abs/html/io-redirection.html
mỗi cppreference:
Sets whether the standard C++ streams are synchronized to
the standard C streams after each input/output operation.
Nếu đồng bộ hóa tắt, luồng C++ sẽ nhanh hơn trong một số trường hợp.
Theo mặc định, tất cả các luồng C++ chuẩn được đồng bộ hóa với luồng C tương ứng.
Ví dụ:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
cout.sync_with_stdio(false);
cout << "Hello\n";
printf("World\n");
cout << "...\n";
}
Output:
Hello
...
World
Thay đổi nó để true
cho kết quả mặc định theo thứ tự. Đầu ra:
Hello
World
...
@POW Vì vậy, tôi có thể rút ra kết luận, nếu không đồng bộ, cout/printf không thể đảm bảo trật tự hoặc thậm chí không thể đảm bảo mọi thứ đang được in? –
@pranitkothari không nhất thiết, một 'endl' sẽ thay đổi kịch bản ngay cả khi đồng bộ hóa tắt – P0W
@POW chắc chắn, nhưng những gì về mà không có endl tôi yêu cầu. Tôi biết bộ đệm tuôn ra. Nhưng những gì không có. –
Điều đó có nghĩa là tôi có thể xuất ra máy in như thiết bị sử dụng cout. Nếu có thể, bạn có thể đề nghị cách. –
@pranitkothari Có. Điều là để có được mô tả tập tin thiết bị và chuyển hướng cout (với một bộ mô tả tập tin 1) cho nó. Bạn có thể làm điều đó trong dòng lệnh. Liên kết trên có thể cung cấp cho bạn một số đầu mối. – lulyon