[英]C++: when we should use “this->” PLUS parameters by reference
假设我们有一堂课
class Foo {
private:
int PARTS;
public:
Foo( Graph & );
int howBig();
}
int Foo::howBig() { return this->PARTS; }
int Foo::howBig() { return PARTS; }
Foo::Foo( Graph &G ) {
<Do something with G.*>
}
howBig()变量中的哪一个是正确的? &符号可确保仅将Graph对象的引用传递给初始化函数? 在CI中可以简单地执行诸如some_function(Graph * G)之类的操作,但是在C ++中,我们同时具有&和*类型的变量,但从未理解它们之间的区别...
谢谢。
当你的成员函数中的局部变量,那么你必须要使用this
为:
Foo::MemberFunction(int a)
{
int b = a; //b is initialized with the parameter (which is a local variable)
int c = this->a; //c is initialized with member data a
this->a = a; //update the member data with the parameter
}
但是,当您没有这种情况时, this
是隐式的。 您需要显式地编写它,这意味着在代码中, howBig
两个版本都是正确的。
但是,在成员初始化列表中,规则不同。 例如:
struct A
{
int a;
A(int a) : a(a) {}
};
在此代码中, a(a)
表示成员数据a
正在使用参数a
初始化。 您不必编写this->a(a)
。 仅a(a)
就足够了。 直观地了解这一点:
A(int a) : a ( a ) {}
// ^ ^
// | this is the parameter
// this is the member data
您可以使用this->
解决从属名称问题,而不必显式拼写基础名称。 如果基地的名字很大,那无疑可以提高可读性。
仅当编写模板并且仅当它们是成员函数时才使用this->
才发生此问题,例如:
template <typename T>
struct bar {
void func();
};
template <typename T>
struct foo : public bar {
void derived()
{
func(); // error
this->func(); // fine
bar<T>::func(); // also fine, but potentially a lot more verbose
}
};
howBig()变量中的哪一个是正确的?
两种情况下,编译器都会产生相同的代码
&符号可确保仅将Graph对象的引用传递给初始化函数? 在CI中可以简单地执行诸如some_function(Graph * G)之类的操作,但是在C ++中,我们同时具有&和*类型的变量,但从未理解它们之间的区别...
在方法中使用变量没有什么区别(语法除外)-在引用(&)的情况下,假设好像已经传递了一个不可见的指针即可使用,而无需取消引用它(&)让客户更轻松地使用
Foo::howBig()
都是正确的。 我一般倾向于使用第二个,但是在某些情况下,涉及模板的情况下需要使用第一个。 两者都是正确的。 通常更短的代码更容易阅读,所以只能用this->
如果你需要它来消除歧义(见其他答案),或者如果你原本无法理解其中符号从何而来。
引用不能反弹,也不能(轻松)绑定为NULL,因此:
std::pair
或boost::tuple
或std::tuple
(仅C ++ 11或TR1)。 更具可读性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.