Невозможно: этот указатель в качестве аргумента по умолчанию. Зачем?

Следующий код не скомпилируется. Зачем?

class A
{
int j;
void f( int i = this->j );
}

Отредактируйте, для ясности. Это то, что я пытался сделать, используя меньше строк кода …

class A
{
void f( int i ){};
void f( );
int j;
};

void A::f()
{
f( j );
}

5

Решение

Значения аргумента по умолчанию связаны во время компиляции.

«this» определяется только во время выполнения, поэтому не может быть использовано.

Смотрите здесь для более полного объяснения:
Должны ли параметры функции по умолчанию быть постоянными в C ++?

6

Другие решения

Другие уже прокомментировали причину, по которой это не работает. Из одного из комментариев:

«… Выражение может объединять функции, которые видны в
текущая область, константные выражения и глобальные переменные.
выражение не может содержать локальные переменные или нестатический член класса
переменные …»

Вы могли бы использовать optional чтобы убрать лишнюю функцию, хотя я не уверен, что она понятнее:

void f( boost::optional<int> i = boost::none ) { if(!i) i = j; ... }

0

По вопросам рекламы [email protected]