指向const对象的指针自动转换为指向对象的指针

时间:2013-07-25 15:38:47

标签: c++ pointers casting const

为什么const指针会自动转换为非const指针?在这个简单的代码中? 不应该在这里警告编译器吗?或抛出错误?

template<typename T>
const T  makeConst(T a){
    return a;
}    

int * j = new int(9);
int * z = makeConst(j); // cast from int* const  ==>  int*

2 个答案:

答案 0 :(得分:2)

它的int*const与[{1}}不同。 const int*表示您无法更改指针指向的内容,但可以更改该值。这是编译器从指针解析int* const的方式。为了解决这个问题,我们通常使用这样的模板:

<typename T>

答案 1 :(得分:1)

(* const)指针意味着指针的目标地址不能改变,尽管该地址的对象可能会被更改。

你的函数返回一个(* const)指针,但代码编译是因为(* const)指针被复制到你的z变量中,这不会改变makeConst返回的实际指针,然后它超出范围而且是破坏。

如果要阻止通过指针修改目标对象,请将const放在*。

之前