在 const 时返回指向自身的指针的类函数。 C++
Posted
技术标签:
【中文标题】在 const 时返回指向自身的指针的类函数。 C++【英文标题】:Class function that returns a pointer to itself while being const. c++ 【发布时间】:2015-12-06 16:16:57 【问题描述】:这是我尝试过的:
game* Reversi::clone() const
Reversi* ptr = this;
return ptr;
但我收到以下错误:
error: invalid conversion from ‘const Reversi*’ to ‘Reversi*’ [-fpermissive]
Reversi* ptr = this;
提前致谢。
【问题讨论】:
这是一个很差的克隆功能。它实际上并没有克隆任何东西。 噢噢耶!告诉 Dolan Elijah 教授打招呼。 :) @erip 我一定会这样做的!我有点难过他只教到 2401。他是一位了不起的教授 【参考方案1】:this
的类型在 const 成员函数中是 const Reversi*
。您可以使用非常量成员函数,
game* Reversi::clone()
Reversi* ptr = this;
return ptr;
或将ptr
的类型改为const Reversi*
,
const game* Reversi::clone() const
const Reversi* ptr = this;
return ptr;
顺便说一句:您的代码只是复制了指针this
,根本不复制内容。这意味着返回的指针只会指向同一个对象。你可能想要,
game* Reversi::clone() const
Reversi* ptr = new Reversi(*this); // use copy ctor here
return ptr;
请注意,当您从this
复制时,成员函数可能是const
。这似乎更合理,因为克隆方法通常不应该改变原始对象的状态。
【讨论】:
在您的第三个示例中,可以将方法设置为const
,并且可能应该是。
就是这样!我不敢相信我什至没有想过使用 new .. 谢谢先生。以上是关于在 const 时返回指向自身的指针的类函数。 C++的主要内容,如果未能解决你的问题,请参考以下文章
C-const和static的区别, 指针作为函数的返回值, 指向函数的指针, 枚举