构造函数初始化列表中的"this"指针
The 'this' pointer in the initialization list of the constructor
我想我无法理解为什么这不起作用。我一直认为我可以在构造函数中使用'this
'指针,但我从来不知道我不能在初始化列表中使用'this
'。
#include <iostream>
class A {
public:
int a;
int b;
A(int a = 0, int b = 0) : this->a(a), this->b(b) { }
void print() {
std::cout << a << ", " << b << std::endl;
}
};
int main() {
A a;
a.print();
}
我很想知道与之相关的细节。
仅仅因为没有必要,初始值设定项列表已经可以消除歧义,因为它的语法很严格:
member(value)
因此,您可以将其更改为:
A(int a = 0, int b = 0) : a(a), b(b) {}
只有当程序员需要帮助编译器消除歧义时,才真正使用 this->member
,例如,如果您的构造函数看起来像:
A(int a = 0, int b = 0)
{
// set local 'a' to itself
a = a;
}
你的A::a
现在不会被初始化,哎呀!
您需要this
来帮助编译器:
A(int a = 0, int b = 0)
{
this->a = a; // set A::a to local a.
}
this->a
在语法上无效,因为它是成员访问表达式,但只允许使用标识符(或基类的类型说明符)。
从C++标准[class.base.init],
mem-initializer-id:
类或分类类型
标识符
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 关于C++中具有多重继承"this"指针的说明
- Doees the 'this' 指针参与虚函数的多态行为
- 为什么成员函数内的"this"指针为空?
- "this"指针的值在对象的生存期内是否恒定?
- 如何将'this'指针传递给C++ WinAPI 线程?
- 无法"this"指针传递到另一个类并在 CPP 中调用该类的任何方法
- 'this'指针是否可以在 c++ 标头声明中使用?
- 为什么在通过引用返回运算符分配时取消引用'this'指针?
- 在类方法中使用 "this" 指针是否是一种好的做法?
- 为什么直接传递"this"指针来存档是一个错误,而另一个相同类型的指针是可以的?
- C++虚拟方法,不需要"this"指针 - 优化
- 指向成员函数签名的指针中缺少"this"指针
- 是否可以获取'this'指针的地址?
- 静态类成员不是与 this 指针没有关联吗?
- 为什么有必要将"this"指针作为"arg"参数传递给pthread_create
- 编译错误:2 个重载没有'this'指针的合法转换。使用结构
- 对象的"this"指针是否等于指向其(单个)基类的指针?
- Do=在lambda的捕获列表中捕获this指针
- 将"this"指针传递给析构函数中的其他类/函数