c++值初始化

c++ value initialization

本文关键字:初始化 c++      更新时间:2023-10-16

我正在阅读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中找到它。每个元素初始化新对象。

也许我举的例子不是最好的,但这是一个开始。