оператор присваивания в параметре функции C++

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

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


template<class Object>
ListNode<Object>::ListNode( const Object& theElement, ListNode<Object> * node) {
    element = theElement;
    next = node;
}
  1. почему существуют операторы присваивания в параметрах функции?
  2. Что значит Object() вызов делать?

3 ответов


это не операторы присваивания. Это аргументы по умолчанию для функции.

функция может иметь один или несколько аргументы по умолчанию, что означает, что если в точке вызова аргумент не указан, используется значение по умолчанию.

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(), которым просто называет конструктор по умолчанию на Object. Это означает, что если нет Object экземпляр передается ListNode конструктор по умолчанию Object() будет использоваться, что просто означает построенный по умолчанию Object.

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


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

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


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