在示例代码中,调用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/