Следующий код не скомпилируется. Зачем?
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 );
}
Значения аргумента по умолчанию связаны во время компиляции.
«this» определяется только во время выполнения, поэтому не может быть использовано.
Смотрите здесь для более полного объяснения:
Должны ли параметры функции по умолчанию быть постоянными в C ++?
Другие уже прокомментировали причину, по которой это не работает. Из одного из комментариев:
«… Выражение может объединять функции, которые видны в
текущая область, константные выражения и глобальные переменные.
выражение не может содержать локальные переменные или нестатический член класса
переменные …»
Вы могли бы использовать optional
чтобы убрать лишнюю функцию, хотя я не уверен, что она понятнее:
void f( boost::optional<int> i = boost::none ) { if(!i) i = j; ... }