为什么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*
答案 0 :(得分:2)
它的int*const
与[{1}}不同。 const int*
表示您无法更改指针指向的内容,但可以更改该值。这是编译器从指针解析int* const
的方式。为了解决这个问题,我们通常使用这样的模板:
<typename T>
答案 1 :(得分:1)
(* const)指针意味着指针的目标地址不能改变,尽管该地址的对象可能会被更改。
你的函数返回一个(* const)指针,但代码编译是因为(* const)指针被复制到你的z变量中,这不会改变makeConst返回的实际指针,然后它超出范围而且是破坏。
如果要阻止通过指针修改目标对象,请将const放在*。
之前