que punteros puntero objeto metodos estructuras con clases clase c++ syntax-error this language-lawyer ctor-initializer

c++ - objeto - punteros en c



El puntero ''this'' en la lista de inicialización del constructor. (2)

Supongo que soy incapaz de entender por qué esto no funciona. Siempre pensé que podía usar el puntero ''this'' dentro del constructor, pero nunca supe que no podía usar ''this'' en la lista de inicialización.

#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(); }

Estoy interesado en conocer los detalles relacionados con el mismo.


Simplemente porque no es necesario, una lista de inicializadores ya puede desambiguar porque su sintaxis es estricta:

member(value)

Así que puedes cambiarlo a:

A(int a = 0, int b = 0) : a(a), b(b) {}

this->member solo se usa realmente cuando el programador necesita ayudar al compilador a desambiguar, por ejemplo, si su constructor hubiera parecido:

A(int a = 0, int b = 0) { // set local ''a'' to itself a = a; }

Tu A::a no se habría inicializado ahora, ¡ay!

Necesitarías this para ayudar al compilador:

A(int a = 0, int b = 0) { this->a = a; // set A::a to local a. }


this->a es gramaticalmente inválido porque es una expresión de acceso de miembro, pero solo se permite un identificador (o un especificador de tipo, para las clases base).

Desde el estándar de C ++, [class.base.init],

mem-initializer-id:
clase-o-decltype
identificador