[英]Why does string not work here while char const* does?
為什么當我發現錯誤時string
在這里不起作用,而char const*
卻起作用? 兩者有什么區別?
try {
throw "connection fail";
} catch( string e ) {
if(e == "connection fail") {
std::cout << "caught: " << e << std::endl;
}
}
你沒有扔一個 std::string,所以你抓不到一個。
為什么不是字符串?
因為在 C++ 中,錯誤命名的字符串文字(這就是"abc"
)不是字符串。 字符串文字為字符串的內容分配了一些 static 存儲空間,並評估為const char (&)[N]
類型,即對給定固定長度的字符數組的引用。 在大多數情況下,該引用衰減為const char *
,它是指向 const char 的指針,並且在對術語“字符串”的任何合理解釋中都與字符串無關。 這是 C 的不幸遺留問題,其中也沒有字符串,並且您通過傳遞指向字符串的第一個字符的指針來傳遞“字符串”,隱含假設字符串必須以'\0'
結尾當然不能包含 NUL ( '\0'
),因為它們與終止符無法區分。
要創建字符串,您必須明確說明: throw std::string("foo bar baz");
這應該工作
try {
throw (std::string)"connection fail";
} catch( string e ) {
if(e == "connection fail") {
std::cout << "caught: " << e << std::endl;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.