当构造函数的输入参数设置为等于 C++ 中的值时,这意味着什么?

What does it mean when an input argument to a constructor is set equal to a value in C++?

例如,这是在头文件中找到的:

SampleConstructor(int hardwareID = INVALID_NODE_ID);

为什么我们不能这样做:

SampleConstructor(int INVALID_NODE_ID);

叫做default argument。 这意味着您可以在不指定任何参数的情况下调用该函数,编译器将使用此默认参数。

在您展示的示例中,INVALID_NODE_ID 是一些可以转换为 int 类型的命名值(或表达式)。

举个例子

#include <iostream>

const int DEFAULT_ARGUMENT = 10;

void f( int x = DEFAULT_ARGUMENT ) { std::cout << "x = " << x << std::endl; }

int main()
{
    f( 20 ); // outputs 20
    f();     // outputs 10 though argument is not explicitly specified
}

相对于构造函数,这意味着可以在没有参数的情况下调用构造函数。这样的构造函数称为默认构造函数

至于这个声明

SampleConstructor(int INVALID_NODE_ID);

那么这里只是参数名用大写字母键入。如果没有参数,则不能调用此构造函数。尽管您可以进一步将其定义为具有默认参数。成员函数的默认参数可以在其声明或/及其定义中指定。

首先让我们记住什么是构造函数:

构造函数是一个成员函数,用于启动class的实例。

这是什么意思?这意味着每次你创建一个 class 的实例(一个 class 的对象或者你更喜欢如何称呼它),你首先必须准备好实例。构造函数准备该实例,以便可以正确使用它。即使您没有在代码中放置构造函数,它也会被使用 "secretly"(好吧,这真的不是什么大秘密)。

现在,假设您创建了一个 class,并且您在 class 中声明了一些变量。例如,如果您想创建 class 的实例,同时使用 class 中默认未定义的变量,您将使用构造函数来更改它们。如果你不改变它们,程序 "secretly" 会使用一个空的构造函数来告诉你的程序 "I don't want any changes made".

因此,回答您为什么不能执行以下操作的问题:

SampleConstructor(int INVALID_NODE_ID);

什么是INVALID_NOD_ID?它可能是 15 之类的数字。您会在代码中编写以下内容吗?:

整数 15;

不,因为 15 不是变量。您必须将变量传递给构造函数,然后才能适当地使用该变量而不是默认值。

如果 INVALID_NODE_ID 是通过以下方式启动的,情况也是如此: 整数 INVALID_NODE_ID = 15; 通过在构造函数中写入 int INVALID_NODE_ID ,您将重新声明变量。

希望对兄弟有帮助