首頁 >後端開發 >C++ >為什麼在 C 11 及更高版本中,「stringstream >>」 在提取失敗時會將目標變數清零?

為什麼在 C 11 及更高版本中,「stringstream >>」 在提取失敗時會將目標變數清零?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-01 06:16:12632瀏覽

Why Does `stringstream >>` 在 C 11 及更高版本中提取失敗時將目標變數清除?
>` 在 C 11 及更高版本中提取失敗時將目標變數清零? " />

為什麼stringstream >> 在失敗時更改Target 的值?

在引用Stroustrup 的「TC PL,第3 版」的段落中,作者指出該值如果提取操作失敗,v 的值應保持不變,但是,一個範例與此語句相矛盾,因為當stringstream >> v 運算時v 被清除。

矛盾行為解釋

理解這種明顯矛盾的關鍵在於提取運算符>>C 11之前和之後的不同行為。 🎜>C 之前11

在C 11 之前,>>使用scanf 風格的解析機制。 ,>>>切換為使用std::num_get方面來解析輸入。的類型,如std::numeric_limits::max() 或std::numeric_limits::min() 寫入v並且設定了失敗位元標誌。為最初是123。後(失敗),該值

stringstream的rdstate()表示設定了failbit,確認提取失敗。 。

以上是為什麼在 C 11 及更高版本中,「stringstream >>」 在提取失敗時會將目標變數清零?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn