例如,这可以在头文件中找到:
SampleConstructor(int hardwareID = INVALID_NODE_ID);
为什么我们不能这样做:
SampleConstructor(int INVALID_NODE_ID);
答案 0 :(得分:4)
它被称为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);
然后这里只是用大写字母键入参数名称。如果没有参数,则不能调用此构造函数。虽然您可以进一步将其定义为具有默认参数。成员函数的默认参数可以在其声明或/及其定义中指定。
答案 1 :(得分:0)
首先让我们记住构造函数是什么:
构造函数是一个成员函数,用于启动类的实例。
这是什么意思?这意味着每次创建类的实例(类的对象或者您更喜欢调用它)时,首先必须准备好实例。构造函数准备该实例以便可以正确使用它。即使你没有在你的代码中加入构造函数,也会秘密地&#34;用过(好吧,它真的没什么大秘密)。
现在,假设您创建了一个类,并且您在该类中声明了一些变量。例如,如果您希望在使用类中未默认定义的变量时创建该类的实例,则可以使用构造函数来更改它们。如果你不改变它们,程序就会秘密地&#34;使用空的构造函数来告诉你的程序&#34;我不想做任何改变&#34;。
因此,要回答您的问题,为什么您无法执行以下操作:
SampleConstructor(int INVALID_NODE_ID);
什么是INVALID_NOD_ID?它可能是15或类似的数字。你会在你的代码中写下以下内容吗?:
int 15;
不,因为15不是变量。您必须将变量传递给构造函数,然后适当地使用该变量而不是默认值。
如果以下列方式启动INVALID_NODE_ID,情况也是如此: int INVALID_NODE_ID = 15; 通过在构造函数中写入int INVALID_NODE_ID,您将重新声明该变量。
希望帮助兄弟。