Grz*_*nio 22 c++ linux g++ exception
我正在使用Linux下的g ++在C++中编写一个非常简单的应用程序,我试图将一些原始字符串作为异常(是的,我知道,这不是一个好的做法).
我有以下代码(简化):
int main()
{
try
{
throw "not implemented";
}
catch(std::string &error)
{
cerr<<"Error: "<<error<<endl;
}
catch(char* error)
{
cerr<<"Error: "<<error<<endl;
}
catch(...)
{
cerr<<"Unknown error"<<endl;
}
}
Run Code Online (Sandbox Code Playgroud)
我Unknow error
上了控制台.但是,如果我将文字字符串静态转换为其中任何一个,std::string
或者按预期char *
打印Error: not implemented
.我的问题是:如果我不想使用静态演员,我应该抓住什么类型?
Joh*_*itb 30
你需要用它来char const*
代替它char*
.既不喜欢std::string
也char*
不会抓住它.
捕获限制了与其匹配的类型的规则.规范说(其中"cv"表示"const/volatile组合"或两者都不是).
处理程序是E类型的异常对象的匹配项
- 处理程序的类型为cv T或cv T&,E和T的类型相同(忽略顶级cv限定符),或者
- 处理程序的类型为cv T或cv T&T是E的明确公共基类,或
处理程序的类型为cv1 T*cv2,E是一种指针类型,可以通过其中一个或两个转换为处理程序的类型
- 标准指针转换(4.10),不涉及到指向私有或受保护或模糊类的指针的转换
- 资格转换
字符串文字具有类型char const[N]
,但抛出数组将衰减数组并实际抛出指向其第一个元素的指针.因此,您无法通过a捕获抛出的字符串文字char*
,因为在它匹配时,它需要匹配char*
a char const*
,这将丢弃一个const(限定转换只允许添加 const).char*
只有在需要专门转换字符串文字时才会考虑字符串文字的特殊转换.
luk*_*uke 10
尝试添加const
你正在捕捉的类型const char*
(可能const char* const
).