您需要使用
char const*而不是
char*。任何东西都
std::string不会,也
char*不会抓住。
关于匹配的类型,捕获具有受限制的规则。规范说(其中“ cv”表示“常量/易失性组合”,或都不表示)。
如果满足以下条件,则处理程序匹配类型为E的异常对象:
- 处理程序的类型为cv T或cv T&,并且E和T是同一类型(忽略顶级cv限定词),或者
- 处理程序是cv T或cv T&类型,并且T是E的明确公共基类,或者
处理程序的类型为cv1 T * cv2,E是指针类型,可以通过以下任意一个或全部将其转换为处理程序的类型
- 标准指针转换(4.10),不涉及对指向私有或受保护或模糊类的指针的转换
- 资格转换
字符串文字的类型为
charconst[N],但抛出一个数组将使该数组衰减,并实际上抛出一个指向其第一个元素的指针。因此,您不能用a捕获抛出的字符串文字
char*,因为在匹配时,它需要将匹配
char*到a
char const*,这将丢弃const(仅允许使用条件转换来 添加
const)。
char*仅在需要专门转换字符串文字时,才考虑对字符串文字进行特殊转换。



