函数参数 C++ 中的赋值运算符
assignment operator within function parameter C++
我正在研究数据结构(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()
叫做什么?
这些不是赋值运算符。 这些是函数的默认参数。
一个函数可以有一个或多个默认参数,这意味着如果在调用点没有提供参数,则使用默认值。
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
。
转到 C 编程语言中的运算符和表达式 http://www.errorless-c.in/2013/10/operators-and-expressions.html
相关文章:
- 重载Singly Linked List中的赋值运算符
- 使用赋值运算符重载从类中返回jobject
- 标准库类型的赋值运算符的引用限定符
- 复制构造函数、赋值运算符C++
- 标准::变体的赋值运算符
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- 基类和派生类的多态赋值运算符
- 为用户定义的类正确调用复制构造函数/赋值运算符
- CRTP 中的复制赋值运算符 - gcc vs clang 和 msvc
- 为什么初始化时没有调用重载赋值运算符?
- 赋值运算符重载和自赋值
- C++矢量复制构造函数和赋值运算符是否也复制保留空间?
- Qt PL/SQL - 赋值运算符 - 字符串缓冲区太小
- 对 r 值使用移动赋值运算符时的异常
- 由于没有使用赋值运算符,映射的值是如何初始化的?
- 默认赋值运算符如何在实际 STL 中实现
- 使用赋值运算符复制 std::vector
- C++ 通过自定义赋值运算符隐式转换函数参数
- 赋值运算符的奇怪行为
- C++赋值运算符,我们可以用 copy 替换它吗?