AFAIK在构造函数初始值设定项列表中不初始化其成员数据的类/结构/联合,那么它们是默认初始化的。如果成员数据是内置整数类型,则其值不确定。如果它是类类型,则调用其默认ctor(需要可访问且未删除的默认ctor)。
这是我的例子:
struct A{
A(){std::cout << "A()\n";}
A(int){std::cout << "A(int)\n";}
A(A const&){std::cout << "A(A const&)\n";}
~A(){std::cout << "~A()\n";}
A& operator = (A const& ){std::cout << "=(Aconst&)\n"; return *this;}
};
struct B{
B(int){std::cout << "B(int)\n";} // a_ and d_ are default-init
double d_;
A a_;
};
B b = 10;
输出:
A()
B(int)
~A()
在这里之前,我很好,但是工会的成员呢
union U{
U(){std::cout << "U()\n";} // needed because a_'s class type has defined a user-defined version
U(U const&){std::cout << "U(U const&)\n";} // needed as above
~U(){std::cout << "~U()\n";} // needed as above
A a_; // has defined copy-control members
int i_;
};
U u1;
U u2 = u1;
输出:
U()
U(U const&)
~U()
~U()
联合U
没有在其ctor-init-list中初始化其成员数据a_
和i_
,这些成员也没有类内初始化器,但它们的构造函数都没有被调用!所以:在构造函数初始值设定项列表中,联合的成员数据是否默认初始化?非常感谢。
一个联合只是一个位置的多个名称(引用)
无论您修改哪个成员,都只有一个位置被寻址
因此所有其他成员都将被修改
union _Union{
int i; // 4 bytes.
long ll; // 4 bytes.
float f; // 4 bytes.
char*txt; // 4 bytes.
};
sizeof(_Union) = 4 bytes
如果结构的大小是16字节
联合的大小是最大成员的大小
如果上面的_Union
有另一个long long int
成员,那么它的大小将是8字节
因为long long int
是8
如果我有一个struct Foo和一个struct Bar: 如果我初始化一个条并打印正确得到的值: 但是现在如果我声明这样的构造函数: 我失去了Bar::foo的默认构造,程序输出了32764 0 5! 为什么我不得不像这样无声地初始化每个成员变量: 只要我声明一个构造函数?在这种情况下,为什么默认构造不起作用?
我在Visual Studio2019中有一个Xamarin表单解决方案。我现在只使用Android版本。完整的错误是: 在此进程中,java.lang.IllegalStateException Message=Default FirebaseApp未初始化AppCardView.Sample.android。确保首先调用FirebaseApp.InitializeApp(上下文)。 在我的An
问题内容: 所以我要声明并初始化一个int数组: 说我改为这样做… … 0将按标准输出。另外,如果我这样做: 将按标准输出。那么默认如何初始化我的数组?是否可以安全地假设默认的初始化将数组索引设置为零,这意味着我不必遍历数组并对其进行初始化? 问题答案: Java程序中未由程序员明确设置为所有内容的所有内容都初始化为零值。 对于的引用(任何包含对象的内容)。 对于int / short / byt
考虑以下代码 VS2013编译器发出以下警告: 警告C4351:新行为:数组“B::member”的元素将默认初始化1 这里有记载 使用C 11,并应用“默认初始化”的概念,意味着B. part的元素将不会被初始化。 但我认为,成员{}应该执行值初始化,而不是默认初始化。VS2013编译器是否损坏? 8.5美元/6 默认初始化类型为T的对象意味着:-如果T是(可能是cv限定的)类类型(第9条),则
问题内容: 默认构造函数和直接初始化对象的字段之间有什么区别? 有什么原因要偏爱以下示例之一? 例子1 例子2 问题答案: 初始化程序在构造函数主体之前执行。(如果你同时具有初始化程序和构造函数,则会产生影响,构造函数代码将第二次执行并覆盖初始化值) 当你始终需要相同的初始值(例如,在你的示例中为给定大小的数组或特定值的整数)时,初始化器是很好的选择,但是它可以对你有利或不利于你: 如果你有许多构
问题内容: 我最近刚与Python中的一个错误作斗争。那是那些愚蠢的新手错误之一,但是它让我思考了Python的机制(我是C ++的老程序员,是Python的新手)。我将列出错误的代码并解释如何解决该问题,然后我有两个问题。 场景:我有一个叫做A的类,它有一个字典数据成员,下面是其代码(当然这是简化的): 使用此代码的类为B类: 请注意,每次调用都会初始化类A的新“干净”实例,并在添加前后打印字典