11

我正在研究数据结构(列表、堆栈、队列),这部分代码让我感到困惑。

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()
4

3 回答 3

19

这些不是赋值运算符。这些是函数的默认参数

一个函数可以有一个或多个默认参数,这意味着如果在调用点没有提供任何参数,则使用默认值。

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()则将使用默认值 of ,这意味着默认构造的Object

另见:
使用默认函数参数的优势 函数参数
的默认值

于 2012-04-11T10:47:05.800 回答
3

声明中的赋值为可选参数提供默认值。Object()表示对Object的默认构造函数的调用。

默认参数的作用如下:可以调用ListNode带有零个、一个或两个参数的构造函数。如果您指定两个参数表达式,它们将照常传递。如果仅指定一个表达式,则其值作为第一个参数传递,第二个参数默认为NULL. 如果不传递任何参数,则第一个参数默认为Objectcreated 及其默认构造函数的实例,第二个参数默认为NULL.

于 2012-04-11T10:48:45.207 回答
0

访问http://www.errorless-c.in/2013/10/operators-and-expressions.html了解 c 编程语言中的运算符和表达式

于 2014-02-23T08:29:13.543 回答