指向常量对象的指针自动转换为指向对象的指针
pointer to const object automatic cast to pointer to object
为什么常量指针会自动转换为非常量指针?在这个简单的代码中?难道不应该在这里警告编译器吗?或者抛出错误?
template<typename T>
const T makeConst(T a){
return a;
}
int * j = new int(9);
int * z = makeConst(j); // cast from int* const ==> int*
因为int*const
与const int*
不同。int* const
表示不能更改指针指向的内容,但可以更改值。这就是编译器从指针解析<typename T>
的方式。为了解决这个问题,我们通常使用这样的模板:
template<typename T>
const T* makeConst(T* a){
return a;
}
int * j = new int(9);
int * z = makeConst(j); // error C2440 in Visual Studio`
(*const)指针表示指针的目标地址不能更改,尽管该地址处的对象可能会更改。
您的函数返回一个(*const)指针,但代码会编译,因为(*const)指针被复制到您的z变量中,这不会改变makeConst返回的实际指针,然后makeConst超出范围并被销毁。
如果要防止通过指针修改目标对象,请将const放在*之前。
相关文章:
- 为什么指针对象没有调用默认构造函数
- 如何访问双指针对象中的方法
- 如何使用智能指针对象执行成员函数指针
- 调用带有指针对象错误的指针变量
- 如何从模板类重载创建的指针对象上的运算符?
- C++指针对象的运算符重载
- 如何初始化数组指针对象
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- C++指针对象差异
- 涉及继承,指针对象的交易以及何时进行的问题
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 字符指针对象和相应的字符数组元素比较
- 如何在 c++ 中克隆为弱指针对象
- 指针对象使用CPP中的指针表达式进行比较
- Visual Studio中智能指针对象的自定义视图
- 使用指针 /对象 /模板参数正确构成
- 如果我确定只有一个线程一次处理指针/对象,则C/C 仍应使用同步
- 如何将值分配给指针对象 c++
- 更改智能指针对象,然后访问它