![](/img/trans.png)
[英]What does the 'hides constructor for' warning mean when compiling C++ with g++?
[英]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);
那么这里只是简单地用大写字母键入参数名称。 没有参数就不能调用此构造函数。 尽管更进一步,您可以将其定义为具有默认参数。 成员函数的默认参数可以在其声明中指定,也可以在其定义中指定。
首先让我们记住什么是构造函数:
构造函数是一个成员函数,用于初始化类的实例。
这意味着什么? 这意味着每次创建一个类的实例(一个类的对象,或者您更喜欢调用它)时,首先必须准备好该实例。 构造函数准备该实例,以便可以正确使用它。 即使您没有在代码中放入构造函数,也将“秘密地”使用它(实际上这并不是什么大秘密)。
现在,假设您创建了一个类,并且在该类中声明了一些变量。 例如,如果您想使用该类中默认未定义的变量来创建该类的实例,则可以使用构造函数来更改它们。 如果不进行更改,则该程序“秘密地”使用一个空的构造函数来告诉您的程序“我不要进行任何更改”。
因此,为回答您的问题,为什么您不能执行以下操作:
SampleConstructor(int INVALID_NODE_ID);
什么是INVALID_NOD_ID? 可能是15之类的数字。 您是否会在代码中编写以下内容?:
诠释15;
不,因为15不是变量。 您必须将一个变量传递给构造函数,然后才能正确使用该变量而不是默认值。
如果以下列方式启动INVALID_NODE_ID,则情况也是如此:int INVALID_NODE_ID = 15; 通过在构造函数中写入int INVALID_NODE_ID,您将重新声明该变量。
希望这对兄弟有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.