c++值初始化
c++ value initialization
我正在阅读Stanley Lipmann的c++入门第4版,我读到关于值初始化的第92页。
我只是不明白什么时候值初始化。我浏览了一下,我知道也有默认初始化和零初始化。有人能解释一下值初始化吗?
说到这段……
一)条款
"有些类没有定义默认值构造函数。我们不能初始化指定这种类型的向量只有一个大小,我们还必须指定一个初始值"
我确实理解上面的内容,但我发现下面的内容与上面的句子相矛盾。
b)条款
"元素类型可以是类类型它没有定义任何构造函数。在这种情况下,图书馆仍然创建一个值初始化的对象。它通过值初始化来实现吗对象"
的成员
我不明白b条款。
感谢您的帮助
a)如果类定义了其他构造函数,这是正确的——从而抑制了默认构造函数的生成。
struct Foo {
Foo(int n) : mem(n) {}
int mem;
};
这个类不能被值初始化。
b)如果类没有定义构造函数,值初始化将简单地对所有子对象(基类和非静态成员)进行值初始化
struct Foo {
Foo() : mem(0) {}
int mem;
};
struct Bar {
Foo f;
};
Bar
的值初始化仅仅意味着f
成员将被值初始化。
参见下列短语在c++中是什么意思:零初始化、默认初始化和值初始化?
#include <vector>
#include <string>
class fooz {
private:
string s;
int n;
public:
fooz(string& str, int num) {
s=str;
n=num;
}
~fooz(){}
void gets(string& str) {str=s;}
void getn(int& num) {num=n;}
};
vector<class fooz> vfDialpad = {
fooz(string(""),0),
fooz(string(""),1),
fooz(string("abc"),2),
fooz(string("def"),3),
fooz(string("ghi"),4),
fooz(string("jkl"),5),
fooz(string("mno"),6),
fooz(string("pqrs"),7),
fooz(string("tuv"),8),
fooz(string("wxyz"),9)
};
之后,两个规则都被激活。这是一个初始化列表,它是c++的新功能,您可能会或可能不会在较新版本的gcc中找到它。每个元素初始化新对象。
也许我举的例子不是最好的,但这是一个开始。
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- C++使用整数的压缩数组初始化对象
- C++初始化基类
- 多成员Constexpr结构初始化
- 复制列表初始化的隐式转换的等级是多少
- 内联映射初始化的动态atexit析构函数崩溃
- 如何在C++中初始化嵌套类中的2个memeber
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 没有用于初始化C++中的变量模板的匹配构造函数
- 在未初始化映射的情况下,将值插入到映射的映射中
- C++成员初始化
- 为什么在C++中首先初始化成员类
- 同时具有"聚合初始化"和"模板推导"
- 初始化具有非默认构造函数的std::数组项的更好方法
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 在C和C++中初始化结构中的数组
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 在函数内部的声明中初始化数组,并在外部使用它
- 继承:构造函数,初始化C++11中基类的类C数组成员