catch(domain_error const& x)和catch(const domain_error& x)之间的区别

时间:2011-08-10 04:57:09

标签: c++ exception-handling reference const

我想知道以下陈述是相同还是不同

1> catch (domain_error const & x) 
2> catch (const domain_error & x)
3> catch (domain_error & const x) // I think this is illegal

基本上,我认为案例1&gt; <情况2>是相同的,情况3>不是合法的语法。 如果我错了,请纠正我。

2 个答案:

答案 0 :(得分:3)

你是对的;前两个是等价的,最后一个是错误。

更一般地说,在处理引用时,语法

const T&

T const &

是等价的,而

T & const

是不允许的。

答案 1 :(得分:2)

1) 2)相同,而 3)无效,因为您无法修改引用本身 - 您只能修改它所指的内容。

以下是规则:

在C const之前放置了类型以使其保持不变。这在C ++中也受支持,但是添加了一个新的扩展语法:const也可以放在类型的右边,以使其左侧的常量变为常量。例子:

  • const char * c; - 这定义了一个指向常量char c的非常量指针。也就是说,您可以修改指针的值,但不能修改它指向的值。这是一个C syntex。
  • char const * c; - 相同,但使用C ++ const规则。
  • char * const p; - 这定义了一个指向非常量char的常量指针。您不能修改指针本身,但可以修改指向的值。
  • char const * const p; - 这定义了一个指向常量char的常量指针。你不能在这里修改任何东西。
  • char const * * const p; - 这定义了一个指向常量char的非常量指针的常量指针。这有多酷?