簡體   English   中英

為什么 string 在這里不起作用而 char const* 可以?

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

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