c++ - 这是对 const_cast 的有效使用吗?

标签 c++ constants const-cast

在示例代码中,调用message() 永远不会影响类的内容,所以我希望该方法是const。但我不希望返回值也为 const,所以像下面这样使用 const_cast 安全吗?还是有更好的解决方案?

编辑:抱歉.. 所以 n_ 是一个指针!

EDIT2:我终于设法正确地重现了这个问题。如果 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 成员函数不仅不应对对象本身进行任何更改,而且不应返回任何可用于在函数外部进行更改的内容。通过返回指向成员变量的非常量指针,您违反了这一原则。

关于c++ - 这是对 const_cast 的有效使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29756053/

相关文章:

c++ - 在 C++ 中初始化 vector 类成员

c++ - 使用必须变化的 const 模板参数测试基于模板的类

c++ - const_cast 是否会导致实际的代码排放?

c++ - 变量值自行变化

c++ - 对于使用输出参数函数来初始化 const 成员的构造函数中的调用,代码比 lambda 更简单

c - (const char *str) , (char const *str) 和 (char *const str) 之间有什么区别?

c++ - webrtc - GetStats() 使用空 RTCStatsReport 调用 OnStatsDelivered

c++ - 使用替代变量声明 : 更改 for 循环的范围

c++ - 我可以删除和删除下面的指针列表吗

c# - 重新编译引用的程序集时常量值不变