我正在研究数据结构(List,Stack,Queue),而这部分代码让我感到困惑。
ListNode( const Object& theElement = Object(), ListNode * node = NULL);
template<class Object>
ListNode<Object>::ListNode( const Object& theElement, ListNode<Object> * node) {
element = theElement;
next = node;
}
Object()
致电做什么?答案 0 :(得分:16)
那些不是赋值运算符。这些函数是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()
,它只是为Object
调用default constructor。这意味着如果没有Object
实例传递给ListNode
构造函数,则将使用默认值Object()
,这仅表示默认构造的Object
。
另见:
Advantage of using default function parameter
Default value of function parameter
答案 1 :(得分:3)
声明中的赋值为可选参数提供默认值。 Object()
表示调用Object
的默认构造函数。
默认参数的效果如下:您可以使用零个,一个或两个参数调用ListNode
构造函数。如果指定两个参数表达式,则会照常传递它们。如果仅指定一个表达式,则其值将作为第一个参数传递,而第二个表达式默认为NULL
。如果不传递任何参数,则第一个参数默认为使用其默认构造函数创建的Object
实例,第二个参数默认为NULL
。
答案 2 :(得分:0)
转到http://www.errorless-c.in/2013/10/operators-and-expressions.html获取c编程语言中的运算符和表达式