我一直在学习 C++,目前正在上课。
我创建了一个类来存储玩家的姓名和分数并定义函数
操作数据并显示它。

我创建的函数之一是比较两个玩家的分数并返回一个指针
给得分较高的玩家。这是函数:

Player * Player::highestScore(Player  p2)const
{
    if(p2.pScore>pScore)
    {
        return &p2;
    }
    else
    {
        return this;
    }
}

从主要我创建以下球员:
Player p1("James Gosling",11);
Player *p4 = new Player("Bjarne Stroustrup",5);

我调用highestScore函数:
Player *highestScore = p1.highestScore(*p4);

但是,正如您在阅读函数本身时可能已经注意到的那样,当我返回指向调用该方法的对象的指针时(如果它具有更高的分数),我收到一条错误消息:
return value type does not match the function type

当我将函数的返回类型声明为 const 时,这个问题似乎消失了,如下所示:
const Player * Player::highestScore(Player  p2)const

让我困惑的部分是为什么它允许我 return &p2 ,它不是 const 并且不允许我返回 this ,它是一个指向调用函数的对象的指针,它也不是 const ?此外,即使我将函数返回类型声明为 const,它仍然允许我 return &p2 ,即使传递给参数的参数不是 const Player 对象?

对不起,如果这个问题看起来很奇怪,或者我想做的是非常糟糕的编程,但这只是为了通过这样做来学习。

最佳答案


thisconst (或更准确地说,是指向 const 的指针)在 const 成员函数中,就像所有数据成员一样:

#include <iostream>
#include <type_traits>

struct A
{
    void foo()
    {
        std::cout << std::is_same<decltype(this), const A*>::value << '\n';
    }

    void bar() const
    {
        std::cout << std::is_same<decltype(this), const A*>::value << '\n';
    }
};

int main()
{
    A a;
    a.foo();
    a.bar();
}

Output :
0
1



我们看不到您尝试了什么,但大概是 Player* const ,它与 Player const* (或 const Player* )不同。您可以将 const ness 添加到 &r2 就好了;去掉 const ness 是另一回事。

关于c++ - 在 const 函数中返回 "this"指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14733431/

10-16 15:02