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