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_);
    }
};
返回类型(不是引用)将复制您要返回的对象.因此无需投射,可以在不影响原件的情况下更改副本.如果删除,代码将干净地编译const_cast.
编辑:基于对问题的最新编辑,我会说这是滥用const_cast.C++遵循的原则是const成员函数不仅不应对对象本身进行任何更改,而且不应返回可用于在函数外部进行更改的任何内容.通过将非const指针返回到成员变量,您违反了此原则.
不,这不是一个有效的用途const_cast.
您的函数不是修改数组,而是授予将数组修改为调用者的权限.因此,它应该拥有这些权利.您无法让某人访问您自己无法访问的内容.因此该方法不应该是const,因此不需要const cast.
您可能还需要函数的const版本,它返回一个const int*.这与例如原理相同std::vector::operator[].即使操作符不修改向量,它也会授予访问权限以修改向量,因此它不是const函数.(但是还有一个const重载版本,它返回一个const引用,因此不授予修改向量的权限)
| 归档时间: | 
 | 
| 查看次数: | 225 次 | 
| 最近记录: |