C++ 何时使用;这";成员函数中的指针
背景: 我正在阅读别人编写的代码,对于C++编程来说,我是相当新的。当我查看此人编写的类和相应的成员函数时,我会对C++ 何时使用;这";成员函数中的指针,c++,this,C++,This,背景: 我正在阅读别人编写的代码,对于C++编程来说,我是相当新的。当我查看此人编写的类和相应的成员函数时,我会对这个指针的用法感到困惑。在某些成员函数中使用此,在其他函数中不使用 为什么会这样 我知道对于最近开始做C++的人来说,这是一个非常普遍的混乱。 代码片段: 班级: 成员函数(不含此): 问题: 请注意,在void InitTable::clearTable()中,使用了this->table.clear(),在void InitTable::deleteEntry()中,使用了ta
这个指针的用法感到困惑。在某些成员函数中使用此
,在其他函数中不使用
为什么会这样
我知道对于最近开始做C++的人来说,这是一个非常普遍的混乱。
代码片段:
班级:
成员函数(不含此
):
问题:
请注意,在void InitTable::clearTable()
中,使用了this->table.clear()
,在void InitTable::deleteEntry()
中,使用了table.erase()
仅table
而不使用this
void InitTable::clearTable()
{
table.clear(); // no "this"
}
这里有什么把戏?如果改为使用this->table.erase()
,会出现什么行为
void InitTable::deleteEntry(std::string sumoID)
{
InitEntry* ie = getEntry(sumoID);
if (ie != NULL)
{
this->table.erase(sumoID); // "this" added
delete ie;
}
}
正如我所说,我有点n00b,因此用最少的示例进行全面的描述将非常有用。在正常函数中不需要它,除非存在与成员同名的参数。在构造函数中,可以使用初始化器列表来防止歧义。使用模板时,可能需要使用此
指针。使用此
的最常见原因是传递到需要“指向此对象的指针”的其他函数。相反,JavaScript坚持要求这样做。如果这个类是模板类呢?您可以使用this->x
使表达式依赖于模板类型。never required不太正确。例如,当您引用基类模板的成员时,它是必需的。“…除非构造函数的成员初始值设定项列表中存在与成员同名的参数,”(参数)名称可以明确使用。对于Praetorian和rodrigos评论的扩展,我发现了这一点,除非使用this
解决名称冲突(如果成员被函数参数遮挡),这主要是一个品味问题。就我个人而言,我总是这-符合会员访问资格。可能有很好的理由去做相反的事情,但坚持使用一种风格几乎肯定是一个好主意。因此,基本上在这种情况下,两种方式都可以,有这个,没有它?是的,这里不需要这个,除了个人喜好,可能。如果您返回调用对象的引用,也可以使用此
void InitTable::deleteEntry(std::string sumoID)
{
InitEntry* ie = getEntry(sumoID);
if (ie != NULL)
{
table.erase(sumoID);
delete ie;
}
}
void InitTable::clearTable()
{
table.clear(); // no "this"
}
void InitTable::deleteEntry(std::string sumoID)
{
InitEntry* ie = getEntry(sumoID);
if (ie != NULL)
{
this->table.erase(sumoID); // "this" added
delete ie;
}
}