การเรียกทั้งสองมีความหมายต่างกันซึ่งไม่เกี่ยวข้องกับประสิทธิภาพ ความจริงที่ว่ามันเพิ่มความเร็วเวลาการดำเนินการเป็น (หรืออาจจะ ) เพียงผลข้างเคียง คุณควรเข้าใจสิ่งที่แต่ละคนทำและไม่รวมในทุก ๆ โปรแกรมเพราะพวกเขาดูเหมือนการเพิ่มประสิทธิภาพ
ios_base::sync_with_stdio(false);
สิ่งนี้จะปิดใช้งานการซิงโครไนซ์ระหว่างสตรีมมาตรฐาน C และ C ++ โดยค่าเริ่มต้นสตรีมมาตรฐานทั้งหมดจะถูกซิงโครไนซ์ซึ่งในทางปฏิบัติอนุญาตให้คุณผสม C- และ C ++ - สไตล์ I / O และรับผลลัพธ์ที่สมเหตุสมผลและคาดหวัง หากคุณปิดใช้งานการซิงโครไนซ์สตรีม C ++ จะได้รับอนุญาตให้มีบัฟเฟอร์อิสระของตัวเองซึ่งจะทำให้การมิกซ์ C- และ C ++ - สไตล์ I / O เป็นการผจญภัย
โปรดทราบว่าสตรีม C ++ ที่ซิงโครไนซ์นั้นมีความปลอดภัยต่อเธรด (เอาต์พุตจากเธรดที่แตกต่างกันอาจสอดแทรก แต่คุณไม่ได้รับข้อมูลซ้ำ)
cin.tie(NULL);
ปลดนี้จากcin
cout
สตรีมที่เชื่อมโยงจะตรวจสอบให้แน่ใจว่าสตรีมหนึ่งรายการถูกล้างข้อมูลโดยอัตโนมัติก่อนการดำเนินการ I / O แต่ละครั้งบนสตรีมอื่น
โดยค่าเริ่มต้นcin
จะเชื่อมโยงกับcout
เพื่อให้แน่ใจว่ามีการโต้ตอบกับผู้ใช้ที่เหมาะสม ตัวอย่างเช่น:
std::cout << "Enter name:";
std::cin >> name;
หากcin
และcout
เชื่อมโยงกันคุณสามารถคาดหวังได้ว่าเอาต์พุตจะถูกฟลัช (เช่นมองเห็นได้บนคอนโซล) ก่อนที่โปรแกรมจะพร้อมต์อินพุตจากผู้ใช้ หากคุณแก้กระแสข้อมูลโปรแกรมอาจบล็อกการรอให้ผู้ใช้ป้อนชื่อ แต่ข้อความ "ป้อนชื่อ" ยังไม่ปรากฏ (เนื่องจากcout
บัฟเฟอร์โดยค่าเริ่มต้นเอาต์พุตจะถูกล้างออก / แสดงบนคอนโซลตามต้องการเท่านั้นหรือเมื่อ บัฟเฟอร์เต็ม)
ดังนั้นถ้าคุณแก้cin
จากcout
คุณต้องให้แน่ใจว่าจะล้างด้วยตนเองเวลาที่คุณต้องการบางสิ่งบางอย่างแสดงผลทุกครั้งก่อนคาดหวังว่าข้อมูลเกี่ยวกับcout
cin
โดยสรุปทราบว่าแต่ละคนทำอะไรทำความเข้าใจผลที่ตามมาแล้วตัดสินใจว่าคุณต้องการหรือต้องการผลข้างเคียงที่เป็นไปได้ของการปรับปรุงความเร็ว