簡體   English   中英

printf/scanf的用法和區別<iostream>和 cout/cin 的區別,什么時候用哪個?</iostream>

[英]printf/scanf usage and difference from <iostream> and cout/cin diffferences, when to use which?

不是關於特定代碼的問題,但在 C++ 中,使用<stdio.h>的運算符 scanf/printf 在我看來與 header <iostream>中的 cout 或 cin 相同,所以任何人都可以解釋運算符之間的區別,為什么我們什么時候使用其中任何一個? 如果以前有人問過這個問題,請謙虛地道歉,但是

謝謝。

scanfprintf不是運算符。 它們是函數。

C++ 的任何標准版本的 C++ 標准庫中都沒有 header <iostream.h> 您可能正在使用一種古老的方言 C++。

什么時候用哪個?

粗略的經驗法則:在編寫 C++ 時使用std::coutstd::cin 寫 C++ 時不要使用printfscanf

那為什么要導入到 C++

據我了解,這是為了讓 C 程序可以以小的增量步驟轉換為 C++。 如果您編寫了使用 C 標准 I/O 的 C 程序,那么您可以在 C++ 中重寫該程序,而無需完全更換 I/O 部分。 這種設計選擇可能是為了鼓勵現有程序/項目從使用 C 轉向使用 C++。

C I/O 功能是為了與 C 向后兼容而存在的殘留功能。

scanf 和 printf 來自 C 並被 C++ 占用。 std::cout/cin 僅是 C++。

當輸入很大並且從標准輸入讀取這樣的輸入的任務可能被證明是一個瓶頸時,普通的競爭程序員面臨着共同的挑戰。 此類問題伴隨着“警告:大 I/O 數據”。

cin/cout 比 scanf/printf 快,這是它們之間的關鍵區別。

為什么scanf比cin快?

在高層次上,它們都是 read() 系統調用的包裝器,只是語法糖。 唯一明顯的區別是 scanf() 必須顯式聲明輸入類型,而 cin 使用模板重載重定向操作。 這似乎不足以成為性能達到 5 倍的充分理由。

事實證明,iostream 使用了 stdio 的緩沖系統。 因此, cin 浪費時間將自身與底層 C 庫的 stdio 緩沖區同步,因此對 scanf() 和 cin 的調用可以交錯進行。

好消息是 libstdc++ 提供了一個選項來關閉所有 iostream 標准流與其相應的標准 C 流的同步,使用

std::ios::sync_with_stdio(false);

與 cout 和 printf 相同。

但簡單來說,cin,cout在c++中使用了提取和插入,基本上已經超載,因此速度慢的另一個因素。

我希望這能回答你為什么一個比另一個更受歡迎的問題,它們基本上是輸入數據的方式,並且在內部 cin、cout 是使用 c stdio 緩沖區庫編寫的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM