如果在类中不使用"this"会发生什么情况?
What happens if you don't use "this" within a class?
假设我有以下类:
class foo{
public:
int someNum;
void calculation(int someNum);
};
定义:
void foo::calculation(int someNum){
someNum = someNum;
}
现在在someNum = someNum
行中,哪个someNum被引用?如果我这样做:
this->someNum = someNum
那么第二个someNum是什么?
什么是好的命名风格来避免这个问题?例如,在objective-c中,在成员变量名前加上"_"前缀。(例如:_someNum);
在成员函数内部,参数名隐藏了相同的类成员名,因此在
void foo::calculation(int someNum){
someNum = someNum;
}
两个someNum
s都指向该参数。这是一个不改变this->someNum
的自赋值。
在this->someNum = someNum;
中,第二个someNum
为函数参数。因此,这将函数形参someNum
的值赋给类成员someNum
。
常见的命名约定包括类成员的m
或m_
前缀或后缀_
。前缀下划线可能会有问题,因为c++保留以下划线开头,后跟大写字母的名称。
注意,构造函数中的成员初始化列表是一种特殊情况:
foo(int someNum) : someNum(someNum) { someNum = someNum; }
^ ^ ^ ^
| | | |
| ----------------------
| These three all refer to the parameter 'someNum',
| and not the class member.
|
The language requires this name to be referring
to a class member (or a base class) and so the
parameter called 'someNum' is not considered.
在最内层作用域中声明的变量遮蔽了外部作用域中的变量。因此,foo::calculation
中的someNum = someNum'
对成员变量someNum
没有影响。相反,someNum引用传入的参数。为了帮助缓解这种情况,命名标准建议使用一致的标识符"m_"作为成员变量的前缀,例如。
相关文章:
- 将指针分配给另一个指针时会发生什么情况?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 在什么情况下,我想在 C/C++ 代码中使用内联汇编代码
- 发生注入类名时会发生什么情况?(C++)
- 在什么情况下,需要共享智能指针而无法使用唯一指针?
- 重新分配向量时,向量中的内存会发生什么情况
- 如果结构中的字符串比使用的 p/调用签名长或短,会发生什么情况?
- 为什么或在什么情况下,你会将参数作为C++中的引用(或指针)传递给函数?
- 如果我向一个12字节的缓冲区写入的字节数少于12,会发生什么情况
- 删除对象(具有不同类型)的引用时会发生什么情况?
- 如果我在 c++ 中以 new 的放置形式使用没有足够的内存,会发生什么情况?
- 使用 Google 基准测试时返回值会发生什么情况?
- 正在连接的等待条件变量的线程会发生什么情况?
- 如果未定义的C++行为符合 C 定义的行为,会发生什么情况?
- 在什么情况下,使用'const T*'输入参数比'const T&'更可取?
- 如果字符串在 C/C++ 中没有 NUL 字符(以防编译器允许它通过)会发生什么情况?
- 将虚拟方法定义为私有方法时会发生什么情况?
- 如果在类中不使用"this"会发生什么情况?
- 如果在成员函数中执行"delete this;",会发生什么情况?
- 在什么情况下'this'指针传递给类方法?