在 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的区别, 指针作为函数的返回值, 指向函数的指针, 枚举

访问器函数采用 const arg 但在 C 中返回非 const 指针

当const遇到指针

c ++返回子类,其中函数返回指向超类的指针

C++ const 修饰符

char * const * (*a) (int b)