xiv*_*r77 0 c++ const const-cast
在示例代码中,调用message()
永远不会影响类的内容,所以我希望方法是const
.但是我也不希望返回值const
,所以const_cast
下面使用它是否安全?还是有更好的解决方案?
编辑:抱歉..这n_
是一个指针!
编辑2:我终于设法正确地重新产生了问题.如果n_
是一个数组int n[100]
怎么办?然后我看到没有问题const_cast
.
class A
{
private:
int n_[10];
public:
/* ... */
int* n() const
{
return const_cast<int*>(n_);
}
};
Run Code Online (Sandbox Code Playgroud)
返回类型(不是引用)将复制您要返回的对象.因此无需投射,可以在不影响原件的情况下更改副本.如果删除,代码将干净地编译const_cast
.
编辑:基于对问题的最新编辑,我会说这是滥用const_cast
.C++遵循的原则是const
成员函数不仅不应对对象本身进行任何更改,而且不应返回可用于在函数外部进行更改的任何内容.通过将非const指针返回到成员变量,您违反了此原则.
不,这不是一个有效的用途const_cast
.
您的函数不是修改数组,而是授予将数组修改为调用者的权限.因此,它应该拥有这些权利.您无法让某人访问您自己无法访问的内容.因此该方法不应该是const,因此不需要const cast.
您可能还需要函数的const版本,它返回一个const int*
.这与例如原理相同std::vector::operator[]
.即使操作符不修改向量,它也会授予访问权限以修改向量,因此它不是const函数.(但是还有一个const重载版本,它返回一个const引用,因此不授予修改向量的权限)