我最近花了很多时间使用javascript,现在又回到了C++.当我从一个方法访问一个类成员时,我倾向于为它添加前缀this->.
class Foo {
int _bar;
public:
/* ... */
void setBar(int bar) {
this->_bar = bar;
// as opposed to
_bar = bar;
}
}
Run Code Online (Sandbox Code Playgroud)
在阅读时,它在试图找出它来自何处时为我节省了大脑周期.
我有什么理由不这样做吗?
Yak*_*ont 13
对类变量使用this->是完全可以接受的.
但是,不要使用下划线启动标识符,也不要__在任何地方包含带双下划线的任何标识符.如果违反这两条经验法则,有些类型的保留符号很容易被击中.(特别是,_IdentifierStartingWithACapital由编译器的标准保留).
Zan*_*ane 10
原则上,访问成员this->是一种编码风格,可以帮助使事情更清晰,但它似乎是一个品味的问题.
但是,您似乎也使用前缀成员_(下划线).我会说那太多了,你应该选择这两种风格中的任何一种.
我有什么理由不这样做吗?
是的,有一个原因你不应该这样做.
仅在隐藏名称时才this->严格要求引用成员变量,例如:
class Foo
{
public:
void bang(int val);
int val;
};
void Foo::bang(int val)
{
val = val;
}
int main()
{
Foo foo;
foo.val = 42;
foo.bang(84);
cout << foo.val;
}
Run Code Online (Sandbox Code Playgroud)
该程序的输出42不是84,因为在bang成员变量中已被隐藏,并val = val导致无操作.在这种情况下,this->需要:
void Foo::bang(int val)
{
this->val = val;
}
Run Code Online (Sandbox Code Playgroud)
在其他情况下,使用this->没有效果,因此不需要.
这本身并不是不使用的理由this->.然而,这种程序的维护是不使用的理由this->.
您正在使用this->文档来指定后面的可变项是成员变量.但是,对于大多数程序员来说,这并不是this->实际文档的标志.使用this->文件的是:
有一个名字已隐藏在这里,所以我正在使用一种特殊的技术来解决这个问题.
由于这不是您想传达的内容,因此您的文档已被破坏.
而不是使用this->记录名称是成员变量,使用一致的合理命名方案,其中成员变量和方法参数永远不会相同.
编辑 考虑同一想法的另一个例子.
假设在我的代码库中,你发现了这个:
int main()
{
int(*fn)(int) = pingpong;
(fn)(42);
}
Run Code Online (Sandbox Code Playgroud)
相当不寻常的构造,但作为一名熟练的C++程序员,你会看到这里发生了什么. fn是一个指向函数的指针,并被分配了值pingpong,无论是什么.然后pingpong使用单int值调用指向的函数42.所以,想知道为什么世界上你需要这样一个小发明,你去寻找pingpong并找到这个:
static int(*pingpong)(int) = bangbang;
Run Code Online (Sandbox Code Playgroud)
好的,那是bangbang什么?
int bangbang(int val)
{
cout << val;
return val+1;
}
Run Code Online (Sandbox Code Playgroud)
"现在,等一下.世界上到底发生了什么?为什么我们需要创建一个指向函数的指针,然后调用它?为什么不调用函数?这不是一样的吗?"
int main()
{
bangbang(42);
}
Run Code Online (Sandbox Code Playgroud)
是的,它是一样的.可观察到的影响是相同的.
想知道这是否真的存在,你会看到:
/* IMPLEMENTATION NOTE
*
* I use pointers-to-function to call free functions
* to document the difference between free functions
* and member functions.
*/
Run Code Online (Sandbox Code Playgroud)
因此,我们使用指向函数的唯一原因是显示被调用的函数是自由函数而不是成员函数.
这对你来说似乎只是一种"风格问题"吗?因为这对我来说似乎很精神错乱.
| 归档时间: |
|
| 查看次数: |
812 次 |
| 最近记录: |