簡體   English   中英

從double到char的字符串流,無失敗,無異常

[英]stringstream from double to char, no failed, no exception

我的代碼僅供測試。 我嘗試檢查在不可能進行類型轉換時stringstream是否會拋出異常。

以下是我的代碼。 您可以在您的環境中進行檢查。

#include <string>
#include <iostream>
#include <sstream>

using namespace std;

int main() {
    stringstream stream("432.23");
    char c = 0;
    try {
      if(!stream>>c) {
        cout<<"Error happend"<<endl;
        return 0;
      }
    }
    catch(...) {
      cout<<"Exception happend"<<endl;
    }

    cout<<"c="<<c<<endl;
    return 0;
}

輸出為c = ^ @

它不應該找到錯誤嗎?

操作員! 優先級高於運算符>>,因此必須將代碼更改為if(!(stream>>c)) 之后,您得到c = 4

您的問題與運算符優先級有關

if(!stream>>c) {

等於

if(0 >> c) 

要獲得預期的行為,您需要使用括號:

if(!(stream>>c)) { 

然后,您將首先嘗試轉移並檢查流的狀態。

代碼有兩個問題:

if (!stream>>c讀入c后不會測試流故障位,它將右移故障位c(0)步驟,因為!的優先級高於>>,因此應將其更改為if (!(stream>>c))

另外,將char'4'讀入c可以正常工作,因此即使更改if語句也不會出錯。

如果要讓流拋出異常,您可以做的是在流上設置異常(但在將char'4'讀入c時,它仍然不會給出錯誤)。

stream.exceptions(ios_base::failbit | ios_base::badbit);

暫無
暫無

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

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