Hem*_*ava 21 c++ this syntax-error language-lawyer ctor-initializer
我想我无法理解为什么这不起作用.我一直以为我可以在构造函数中使用'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();
}
Run Code Online (Sandbox Code Playgroud)
我很想知道与之相关的细节.
Som*_*ken 30
仅仅因为没有必要,初始化列表已经可以消除歧义,因为它的语法是严格的:
member(value)
Run Code Online (Sandbox Code Playgroud)
所以你可以把它改成:
A(int a = 0, int b = 0) : a(a), b(b) {}
Run Code Online (Sandbox Code Playgroud)
this->member 只有当程序员需要帮助编译器消除歧义时才会真正使用它,例如,如果你的构造函数看起来像:
A(int a = 0, int b = 0)
{
// set local 'a' to itself
a = a;
}
Run Code Online (Sandbox Code Playgroud)
你A::a现在不会被初始化,哎呀!
您需要this帮助编译器:
A(int a = 0, int b = 0)
{
this->a = a; // set A::a to local a.
}
Run Code Online (Sandbox Code Playgroud)
Pot*_*ter 27
this->a 语法无效,因为它是一个成员访问表达式,但在那里只允许一个标识符(或类型说明符,对于基类).
从C++标准,[class.base.init],
mem-initializer-id:
class-or-decltype
标识符
| 归档时间: |
|
| 查看次数: |
2191 次 |
| 最近记录: |