我目前正在学习一门C++课程并试图深入理解整个事情。 我想出了一些理论,这将是巨大的,如果有人能证实他们:变量初始化和构造函数
每个变量(本地,全局staic,会员和非会员)都保证有第一次使用
之前调用它的构造函数像int这样的基本类的ctors基本上是no-ops,所以我们明确地赋值了一个值,没有默认的零值。
以下类在语义上是相同的(并且应该产生相同代码)
class A
{
int n;
};
和
class A
{
int n;
public:
A() : n() {}
};
和
class A
{
int n;
public:
A() { n = int(); }
};
变量n为在所有情况下仍然未初始化。
编辑:
这似乎是我absolutetly低估了这个问题的复杂性,我大部分的假设是错误的。现在Iam仍然试图找出对象初始化的基本规则。
我觉得这个说法很难相信。 class Bar {int n; }是一个POD,因为它是隐式定义的,因此它是/平凡/(来自ISO的正式术语)。然而,它是存在的,并且'新酒吧'和'新酒吧()`称它。在任何情况下Bar :: Bar()都不会初始化Bar :: n – MSalters 2009-06-11 10:04:31
“class B {int n;};” *不是* POD,因为它包含一个私有的非静态成员'n'。但是,如果它被定义为“class B {public:int n;};”那么它将是一个POD,所以当您执行“新Bar()”时,'n'将被初始化。 – 2009-06-11 10:59:04
新手是否有可能完全理解这个主题?似乎有这么多的规则和例外:-( – codymanix 2009-06-11 11:22:23