考虑一下:
我有一个包含一些私有(private)变量和一些公共(public)方法的类,例如 setter 或构造器。当我实现这些方法时,说 this->variable = 0;
或 namespace::class::variable = 0;
有什么不同吗?
在标题中(example.h):
namespace spc
{
class MyClass
{
public:
MyClass();
private:
int variable;
int variable2;
};
}
现在在 cpp 文件 (example.cpp) 中我有:
spc::MyClass::MyClass()
{
spc::MyClass::variable = 0;
this->variable2 = 0;
}
这将编译。而且在应用程序源中,此类的构造和对象将具有值为 0 的两个变量(假设我也有一些 setter/getter )。所以我的问题是:这两行代码彼此有什么不同吗?
最佳答案
This will compile
spc::MyClass::variable = 0;
this->variable2 = 0;
没错!但这也会编译,产生相同的结果:
variable = 0;
variable2 = 0;
一般来说,this->
和作用域解析 ::
运算符可以让您在出现歧义时指示编译器使用哪个变量。例如,构造函数参数可能与成员变量同名:
spc::MyClass::MyClass(int variable2)
{
this->variable2 = variable2;
}
在这里,this->
的使用区分了 variable2
-the-parameter 和 variable2
-the-member of spc::MyClass
.
然而,在没有歧义的情况下,使用“普通”变量名对于语言来说是“惯用的”。
注意 MyClass::something
和this->something
之间的一个区别是当 something 是虚成员函数时;前者会抑制虚拟调用机制,而后者不会(感谢 Sebastian Redl 的精彩评论)。
关于c++ - C++ 中的 this->variable 和 namespace::class::variable 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27861073/