const T& vs T& const。有什么不同?

时间:2014-03-17 13:09:11

标签: c++ pointers reference const

我知道

f(const T& obj) // (1)
g(T const& obj) // (2)

是相同的。(我们无法在fg的正文中更改obj的值。

但是什么

h(T & const) // (3)

真的意味着什么?

另一个例子:

k(T const * const & const obj_p) // (4)

第一个const:你不能改变实际obj(* obj_p)

的值

第二个const:你不能改变*(obj_p)

的值

第三个const:?

2 个答案:

答案 0 :(得分:1)

const之后的&意味着它绑定到变量名称,因此建议在初始化之后不能使该名称引用其他内容。但无论如何,所有引用都是如此,所以即使你的编译器接受& const,它也是多余的,并且会更加清晰,只有&

答案 1 :(得分:1)

第三个例子:

h(T & const) 

does not really compile

第四个例子:

k(T const * const & const obj_p)

does not compile either,但是如果删除最后一个const限定词:

k(T const * const & obj_p)

它是一个const指针(指针地址不能改变)到const T(指向对象不能改变)作为参考传递。

了解更多信息see this answer