Hai cuộc gọi có ý nghĩa khác nhau không liên quan đến hiệu suất; thực tế là nó tăng tốc thời gian thực hiện (hoặc có thể ) chỉ là một tác dụng phụ. Bạn nên hiểu những gì mỗi người trong số họ làm và không mù quáng đưa chúng vào mọi chương trình vì chúng trông giống như một sự tối ưu hóa.
ios_base::sync_with_stdio(false);
Điều này vô hiệu hóa đồng bộ hóa giữa các luồng tiêu chuẩn C và C ++. Theo mặc định, tất cả các luồng tiêu chuẩn được đồng bộ hóa, trong thực tế cho phép bạn kết hợp I / O kiểu C- và C ++ và nhận được kết quả hợp lý và mong đợi. Nếu bạn vô hiệu hóa đồng bộ hóa, thì các luồng C ++ được phép có bộ đệm độc lập của riêng chúng, điều này làm cho việc trộn I / O theo kiểu C- và C ++ trở thành một cuộc phiêu lưu.
Ngoài ra, hãy nhớ rằng các luồng C ++ được đồng bộ hóa là an toàn cho luồng (đầu ra từ các luồng khác nhau có thể xen kẽ, nhưng bạn không nhận được các cuộc đua dữ liệu).
cin.tie(NULL);
Điều này cởi trói cin
từcout
. Các luồng bị ràng buộc đảm bảo rằng một luồng được xóa tự động trước mỗi hoạt động I / O trên luồng khác.
Theo mặc định cin
được gắn cout
để đảm bảo tương tác người dùng hợp lý. Ví dụ:
std::cout << "Enter name:";
std::cin >> name;
Nếu cin
và cout
bị ràng buộc, bạn có thể mong đợi đầu ra được xóa (nghĩa là hiển thị trên bàn điều khiển) trước khi chương trình nhắc nhập từ người dùng. Nếu bạn gỡ các luồng, chương trình có thể chặn người dùng nhập tên của họ nhưng thông báo "Nhập tên" vẫn chưa hiển thị (vìcout
được đệm theo mặc định, đầu ra bị xóa / hiển thị trên bảng điều khiển theo yêu cầu hoặc khi đệm đầy).
Vì vậy, nếu bạn gỡ bỏ cin
từ đó cout
, bạn phải đảm bảo tuôn ra cout
thủ công mỗi khi bạn muốn hiển thị một cái gì đó trước khi mong đợi đầu vào cin
.
Để kết luận, hãy biết những gì mỗi người trong số họ làm, hiểu hậu quả và sau đó quyết định xem bạn có thực sự muốn hoặc cần tác dụng phụ có thể của cải thiện tốc độ hay không.