Вопрос по function-parameter, parameters, assignment-operator, c++ – оператор присваивания в параметре функции C ++

8

Я изучаю структуры данных (List, Stack, Queue), и эта часть кода сбивает меня с толку.

<code>ListNode( const Object& theElement = Object(), ListNode * node = NULL);


template<class Object>
ListNode<Object>::ListNode( const Object& theElement, ListNode<Object> * node) {
    element = theElement;
    next = node;
}
</code>
Why there are assignment operators within function parameters? What does Object() call do?

Ваш Ответ

3   ответа
0

идти кhttp://www.errorless-c.in/2013/10/operators-and-expressions.html для операторов и выражений на языке программирования c

3

Назначения в объявлениях предоставляют значения по умолчанию дляoptional parameters. Object() означает вызовObjectконструктор по умолчанию.

Влияние параметров по умолчанию заключается в следующем: вы можете вызватьListNode конструктор с нулем, одним или двумя параметрами. Если вы указываете два выражения параметров, они передаются как обычно. Если вы укажете только одно выражение, его значение передается в качестве первого параметра, а вторым по умолчанию присваивается значениеNULL, Если вы не передадите никаких параметров, первый параметр по умолчанию будет экземпляромObject создается с его конструктором по умолчанию, а второй по умолчаниюNULL.

16

Это не операторы присваивания. Теdefault arguments для функции.

Функция может иметь один или несколькоdefault argumentsЭто означает, что если в вызывающей точке аргумент не указан, используется значение по умолчанию.

void foo(int x = 10) { std::cout << x << std::endl; }

int main()
{
  foo(5); // will print 5
  foo(); // will print 10, because no argument was provided
}

В приведенном вами примере кодаListNode Конструктор имеет два параметра с аргументами по умолчанию. Первый аргумент по умолчаниюObject(), который просто называетdefault constructor заObject, Это означает, что если нетObject экземпляр передается вListNode конструктор, по умолчаниюObject() будет использоваться, что просто означает построенный по умолчаниюObject.

Смотрите также:
Преимущество использования параметра функции по умолчанию
Значение по умолчанию для параметра функции

Я испытываю соблазн голосовать «за», если вы упомянули, что параметры по умолчанию являются одним из «злых» параметров. Особенности C ++. Они превращают невинных конструкторов в конвертирующие конструкторы или конструкторы по умолчанию. Они затрудняютbind функции. Это является помехой, когда нужно указать только некоторые параметры, а другие оставить по умолчанию.
И я нет. Один размер не подходит для всех. Иногда они очень полезны.
@pmr, я не обязательно согласен с вами, что они "злые". Это полезный способ избежать повторения путем написания нескольких конструкторов, когда вы можете просто предоставить одному конструктору параметр по умолчанию. Стандартные реализации библиотеки часто используют это, например,vector(const allocator_type& a = allocator_type());
@CharlesSalvia Создание объектов по умолчанию как конструируемых - один из хороших вариантов использования аргументов по умолчанию. Я положил «зло» в кавычках, чтобы указать, что существуют варианты использования, но необходимо соблюдать определенную осторожность, и они не должны быть первым вариантом.
@pmr: я не обязательно согласен, что они злые. Однако я согласен, что 1. конструктор должен быть помеченexplicit если он может быть вызван с одним аргументом и 2. когда параметров много, функция является трудной задачей ... но ни одна из них не связана с параметрами по умолчанию как таковыми.

Похожие вопросы