繁体   English   中英

函数参数C ++中的赋值运算符

[英]assignment operator within function parameter 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()调用做什么?

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

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

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编程语言编写的运算符和表达式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM