我是C++的新手.不要介意这个愚蠢的问题:
在第52页的C++入门第4版(Stanley Lipmann)中,有一句话说:
无论在何处定义变量,都使用默认构造函数.
任何人都可以解释一下吗?这些陈述似乎缺少了一些东西.
如果你有课Object:
class Object
{
public:
int x;
Object() { x = 5; }
};
Run Code Online (Sandbox Code Playgroud)
然后你在这样的函数中实例化一个:
void foo()
{
Object obj;
// obj.x == 5
}
Run Code Online (Sandbox Code Playgroud)
将使用默认构造函数。当您在另一个类中声明对象并实例化该另一个类时,也会使用默认构造函数来构造对象:
class AnotherObject
{
public:
Object obj;
};
void bar()
{
AnotherObject another;
// another.obj.x == 5
}
Run Code Online (Sandbox Code Playgroud)
从书本身:
如果定义了类型的变量但未提供初始化程序,则每个类还可以定义会发生什么.类通过定义一个特殊的构造函数(称为默认构造函数)来实现.此构造函数称为默认构造函数,因为它"默认运行"; 如果没有初始值设定项,则使用此构造函数.无论在何处定义变量,都使用默认构造函数.
(我的斜体).
所以你在本书的一个部分,他们已经在谈论默认构造函数(在其他一些答案中应该很明显,默认构造函数绝对不会总是使用).
所有的这本书是在说,在默认的构造函数的情况下被使用,这都没有区别,在所有对变量的定义(内部或外部的功能,内部或外部的类,在大括号如循环,选择语句,甚至裸露的大括号,等等).
虽然我没有方便检查的副本,但我猜李普曼的意思是如果你有类似的东西:
myclass X;
Run Code Online (Sandbox Code Playgroud)
...该X对象将使用默认构造函数进行初始化,无论该对象是全局对象(在任何函数之外)、局部于函数还是局部于函数内的其他范围(例如,在循环中for)。
将此与内置类型 line 进行对比int,后者具有更复杂的规则:全局int(在任何函数外部定义的规则)或在函数内部定义的规则,但使用static存储类,将初始化为零,但int使用自动存储定义(在函数内部定义,未指定static)是“默认初始化”,这(在本例中)意味着它未初始化为可预测的值。