Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是C++;始终调用默认构造函数,如C++;底漆? 我是C++新手。不要介意这个愚蠢的问题: 在第52页的C++底漆第四版(Stanley Lipmann)中,有一句话说:_C++ - Fatal编程技术网

是C++;始终调用默认构造函数,如C++;底漆? 我是C++新手。不要介意这个愚蠢的问题: 在第52页的C++底漆第四版(Stanley Lipmann)中,有一句话说:

是C++;始终调用默认构造函数,如C++;底漆? 我是C++新手。不要介意这个愚蠢的问题: 在第52页的C++底漆第四版(Stanley Lipmann)中,有一句话说:,c++,C++,无论在何处定义变量,都将使用默认构造函数 有人能再解释一下吗?这句话似乎遗漏了什么。你大概是指斯坦利·利普曼吧 不管怎样,虽然我手边没有一份副本可供检查,但我猜他的意思是,如果你有: myclass X; “X对象将使用默认的ctor进行初始化,无论该对象是全局对象(在任何函数之外)、函数的局部对象还是函数内某个其他范围的局部对象(例如,在for循环中) 与此相反,内置类型行int,它具有相当复杂的规则:全局int(在任何函数外部定义的)或在函数内部定义但具有静态存储类的行将初始化为零,但具有

无论在何处定义变量,都将使用默认构造函数

有人能再解释一下吗?这句话似乎遗漏了什么。

你大概是指斯坦利·利普曼吧

不管怎样,虽然我手边没有一份副本可供检查,但我猜他的意思是,如果你有:

myclass X;
X
对象将使用默认的ctor进行初始化,无论该对象是全局对象(在任何函数之外)、函数的局部对象还是函数内某个其他范围的局部对象(例如,在
for
循环中)


与此相反,内置类型行
int
,它具有相当复杂的规则:全局
int
(在任何函数外部定义的)或在函数内部定义但具有
静态
存储类的行将初始化为零,但具有自动存储的
int
将被定义为零(在函数内部定义,未指定
静态
)为“默认初始化”,这(在本例中)意味着它未初始化为可预测值。

如果您有类
对象

class Object
{
public:
    int x;

    Object() { x = 5; }
};
在函数中实例化一个,如下所示:

void foo()
{
    Object obj;
    // obj.x == 5
}
将使用默认构造函数。当您在另一个类中声明对象并实例化该另一个类时,也会使用默认构造函数构造对象:

class AnotherObject
{
public:
    Object obj;
};

void bar()
{
    AnotherObject another;
    // another.obj.x == 5
}
12.1美元

默认构造函数(12.1)、复制构造函数和复制赋值运算符(12.8)以及析构函数(12.4)是特殊的成员函数。当程序未显式声明这些成员函数时,实现将隐式声明这些类类型的成员函数,12.1中说明的除外。如果使用这些成员函数,则实现将隐式定义它们,如12.1、12.4和12.8中所述。程序不得ne隐式声明的特殊成员函数。程序可以显式引用隐式声明的特殊成员函数。[示例:程序可以显式调用、获取隐式声明的特殊成员函数的地址或形成指向该成员的指针。

摘自本书:

每个类还可以定义如果定义了该类型的变量但未提供初始值设定项时会发生的情况。类通过定义一个特殊构造函数来实现这一点,该构造函数称为默认构造函数,因为它是“默认”运行的如果没有初始值设定项,则使用此构造函数。无论在何处定义变量,都将使用默认构造函数

(我的斜体)

因此,在本书的某一部分中,他们已经在讨论默认构造函数(正如在其他一些答案中应该很明显的那样,默认构造函数肯定不会一直被使用)


这本书的意思是,在使用默认构造函数的情况下,定义变量的位置(函数内部或外部、类内部或外部、循环等内部大括号、选择语句甚至裸大括号等)没有任何区别.

我认为你需要给这个句子添加更多的上下文,因为默认构造函数并不总是被使用的……他们说,没有愚蠢的问题,但很明显他们是错的。这个网站是专门设计的,所以这些问题和答案不仅能帮助真正提出某个特定问题的人,也能帮助正在寻找答案的人正在寻找相同或类似问题的答案。现在想想看,“c++新手:愚蠢的问题”这个主题有多大帮助.为社区做点什么。想想你在问什么,问得恰当,社区可能会帮助你。哪一章/哪一节?我似乎找不到那句话,@Maciej,你可以自己编辑问题来解决它!在2196 rep,你有这种能力。想想你写那篇文章和对比花了多少时间它包含了修复实际问题标题所需的时间。您可以留下一些不那么尖刻的评论,如“请确保标题在将来有意义。为您修复。”然后自己修复,并有时间出去喝杯咖啡:-)@pacdiablo:当然,最好的方法是指出这个标题及其原因,并对其进行修复。仅仅修复它不会让extdummy学到任何东西。听起来这就是它的要点。如果不需要其他构造函数,那么数组和堆变量/数组也是默认构造的。