簡體   English   中英

printf()將其參數轉換為像cout一樣的字符串嗎?

[英]Does printf() convert its arguments to string like cout?

我開始從C學習C ++。最近,我剛讀了一本關於C ++的教程。 在“ 介紹流 ”一節中,本書注意到:

<<運算符被重載,因此右側的操作數可以是字符串或任何原始值。 如果此操作數不是字符串,則<<運算符在將其發送到輸出流之前將其轉換為字符串形式。

所以我想知道C中的printf()函數是否具有相同的效果。 如果沒有,請告訴我他們兩者之間的差異。

好吧,當然它必須以某種方式生成每個參數的字符串表示,這是為了打印一些東西所需要的。 打印包括將字符流發送到輸出設備,除非您有一系列字符,否則無法打印。

printf()函數使用格式化字符串來控制如何解釋每個參數以創建字符表示,以及如何在輸出時格式化該表示。

請注意,當然可以在外部看到參數的“轉換”。 不可能

printf("%d\n", 47);

可以使47成為一個字符串到位; C使用call by value,因此函數只獲取值的副本,然后使用%d轉換說明符中隱含的類型信息來確定如何生成組成的兩個字符'4''7'印刷品。

所以我想知道C中的printf()函數是否具有相同的效果。

C和C ++都使用流來輸出。 在C中它是stdout ,在C ++中它是cout

雖然從語句printf寫入標准輸出(stdout)說明終端是不明顯的。

在cout的情況下,從聲明本身可以看出輸出正在進行的情況。

一些微妙的差異

使用cout你可能需要包含一個額外的標題 - 比如說iomanip - 並使用一些函數 - 比如setw() - 來獲得精確的格式,就像你在printf依賴格式字符串一樣。

性能 - 每個都有自己的優勢,具體取決於您打印的內容和打印位置。 我從這里借了這一點

另一個相似

C ++和C標准都沒有提及函數參數的評估順序。 所以你不能嘗試功能性的花哨的東西。 例如,你不應該這樣做

printf(%d%d",++i,i++); // The behaviour is undefined.

你也不應該這樣做

cout<<++i<<++i; // The behaviour is undefined.

注意:

請記住,如果包含必要的標頭,則c流可在C ++中使用。

暫無
暫無

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

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