[英]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.