20 мая 2008

Naming arguments in constructors

Кстати, имена аргументов в конструкторе вполне могут совпадать с именами членов:
class foo
{
foo(int x, int y) : x(x), y(y) {}
int x, y;
};

6 комментариев:

Unknown комментирует...

Только в initialization list. Внутри конструктора scope перекрывается, и для обращения к членам приходится использовать this.

Kirill V. Lyadvinsky комментирует...

С удовольствием давно пользуюсь этим удобным фактом. Более того, можно писать и так:

class foo
{
foo(int x, int y)
{
this->x = x;
this->y = y;
}
int x, y;
};

Cthulhu комментирует...

Можно-то оно конечно можно. Но только это стопроцентный путь на Тёмную сторону.

Raider комментирует...

Cthulhu: Да какая там темная сторона?
для простых конструкторов, состоящих только из списка инициализации - как раз то, что доктор прописал. Чтобы не сидеть и не напрягать мозги как назвать параметры непохоже на мемберов.

Raider комментирует...

Michael: ну да, в списке инициализации, конечно.

Cthulhu комментирует...

raider, навскидку могу назвать 2 потенциальные проблемы:

1. Рефакторинг.
Например, было:
A::A( B * ptr, C * another ) :
ptr( ptr ), another( another )
{}
Стало:
A::A( B * ptr, C * another ) :
ptr( 0 ), another( another )
{
ptr = new B( another );
}
Идея понятна?

2. Методы-мутаторы. Там всё равно придётся морщить моск и придумывать имена параметрам.