我想知道以下陈述是相同还是不同
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>不是合法的语法。 如果我错了,请纠正我。
答案 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的非常量指针的常量指针。这有多酷?