在C ++中引用“当前”对象的正确/适当的英语术语是什么。例如,假设您正在撰写评论的主体:
Thing Thing::operator+(const Thing& other)
你有一个变量名“other”用于另一个对象,但你用什么单词/表达来引用正在进行操作的对象?
答案 0 :(得分:11)
在C ++中,它被称为this
对象,这就是我正在使用的对象。
编辑 :我再次提到Neil关于operator+()
更好地成为非会员的评论。对我来说,规范形式是将+=
作为成员实现(它改变了左侧对象,因此应该可以访问它)并在其上实现operator+
:
inline Thing operator+(Thing lhs, const Thing& rhs)
{
lhs += rhs;
return lhs;
}
(注意:我过去常常通过const引用传递lhs
,并在函数内执行复制,但不久前确信最好将它作为副本传递。)
答案 1 :(得分:6)
“这个”的问题在于它是英语中的常用词。作为一个在C ++上进行过广泛演讲的人,当我使用“this”来表示当前对象时,我总是觉得难以说话。我从来没有想出一个完美的解决方案,但经常希望BS使用“自我”代替“这个”。
答案 2 :(得分:3)
“this”,或者“this instance”。如:
/** \brief Adds another Thing to this instance.
* A reference to this instance is returned.
*/
Thing& Thing::operator+(const Thing& other);
标记为Doxygen,适用于那些不熟悉的人。
答案 3 :(得分:3)
我倾向于在文档中使用与在代码中使用相同的约定:我将其隐含。例如。 “添加另一件事并返还总和”。
当我需要明确时,它是由其他程序员阅读的评论。他们知道C ++,*this
很容易理解。例如。 “通过添加除Thing :: foo之外的所有成员,将另一件事添加到*this
,这将成为0(参见错误#42)”
答案 4 :(得分:2)
首先,有专门用于此目的的this
指针。因此,将当前对象称为“此对象”是很自然的。
答案 5 :(得分:2)
也可以使用“left operand”和“right operand”,因为你的运算符是二进制的。
答案 6 :(得分:0)
在评论中,我通常会说“这个”或“我自己”(因为我通常用第一人称复数写评论,但是当我们只有一个对象时,“我们自己”太奇怪了。)
在文档中,我说“<whatever>
”。如果这是不明确的(例如,因为该函数将另一个作为参数),我说“this object”或“this <whatever>
”。 <whatever>
可以是类名,也可以是文档中用于解释类所代表内容的其他术语。
/**
* An utterly useless write-only counter, with arbitrary initial value.
*/
class Counter {
unsigned int count;
public:
/**
* Increments the counter
*/
Counter &operator++() {
// We need to add 1 to ourself. I found a snippet online that does it:
++count;
// return ourself
return *this;
}
/**
* Adds together this counter and "other".
*/
Counter operator+(const Counter &other) const {
Counter result;
// new count is our count plus other count
result.count = count + other.count;
return result;
}
};
答案 7 :(得分:0)
如果在类范围之外实现运算符,则参数通常命名为lhs
和rhs
(左侧和右侧)。
您实际上并不需要当前对象的名称,因为您已经拥有this
指针。在静态方法内部,有时需要指针作为类的对象(例如,调用实例方法)。在这些情况下,我使用变量名pThis
。
如果你在谈论它时确实需要一个名字,那么“自我”是有意义的。我有时称它为“这个对象”。
答案 8 :(得分:0)
在我看来,如果你想引用当前对象,那么称它为当前对象就不会出错。
答案 9 :(得分:-2)
C ++中没有当前对象,但成员函数中只有指向对象的指针此指针。