我一直在学习 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 对象?对不起,如果这个问题看起来很奇怪,或者我想做的是非常糟糕的编程,但这只是为了通过这样做来学习。
最佳答案
this
是 const
(或更准确地说,是指向 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/