相关疑难解决方法(0)

将对象初始化为全零

通常,数据结构的有效初始化是将所有成员设置为零.即使使用C++进行编程,也可能需要与外部API进行交互.

以下是否有任何实际区别:

some_struct s;
memset(&s, 0, sizeof(s));
Run Code Online (Sandbox Code Playgroud)

简单地说

some_struct s = { 0 };
Run Code Online (Sandbox Code Playgroud)

人们发现自己都使用这两种方法,选择哪种方法更适合给定的应用程序?(希望据了解,这只适用于POD结构;如果该结构中存在C++ std :: string,则会遇到各种各样的破坏.)

对于我自己来说,作为一个不使用memset的C++程序员,我从不确定函数签名,所以我发现第二个例子更容易使用,除了更少打字,更紧凑,甚至更多很明显,因为它在声明中说"这个对象被初始化为零"而不是等待下一行代码并且看到"哦,这个对象初始化为零".

在C++中创建类和结构时,我倾向于使用初始化列表; 我很好奇人们对上面两个"C风格"初始化的想法,而不是与C++中可用的内容进行比较,因为我怀疑我们很多人都与C库接口,即使我们自己主要用C++编写代码.

编辑: Neil Butterworth 在后续提出这个问题,我认为这是这个问题的一个有趣的推论.

c c++ struct

18
推荐指数
4
解决办法
8503
查看次数

如何初始化一个以结构为值的地图?

我使用map作为ID - > value的关联数组,其中值是定义对象的结构:

#include <map>

struct category {
        int id;
        std::string name;
};

std::map<int, category> categories;

int main() {
        categories[1] = {1, "First category"};
        categories[2] = {2, "Second category"};

}
Run Code Online (Sandbox Code Playgroud)

上面的代码用g ++编译,但有以下警告:

warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x
Run Code Online (Sandbox Code Playgroud)

我在这里阅读了关于struct初始化的各种问题/答案,但我仍然有点困惑.我有一系列相关问题:

  1. 我可以添加编译器选项-std = c ++ 0x并完成警告,但仍然没有更明智的基础问题.如果我在类别结构中添加方法,事情会不会破裂?

  2. 以更符合C++ 03的方式初始化此POD结构(类别)的最佳方法是什么?

  3. 基本上,我还不确定以某种方式而不是另一种方式做事的后果.这种关联数组(其中关键是对象的ID)的很容易与PHP,我还在学习正确的方法做它在C++.在上面的代码中是否有任何我应该注意的事项?

编辑
下面的问题是相关的,但是当我第一次看到他们,我不明白的答案:
c + +初始化匿名结构
的C++初始化结构与数组作为成员
用C初始化结构++

c++ struct associative-array initialization map

17
推荐指数
3
解决办法
5万
查看次数

C++抑制自动初始化和销毁

如何抑制类型的自动初始化和销毁​​?虽然T buffer[100]自动初始化所​​有元素buffer并在它们超出范围时销毁它们是很棒的,但这不是我想要的行为.

#include <iostream>

static int created   = 0,
           destroyed = 0;

struct S
{
    S()
    {
        ++created;
    }
    ~S()
    {
        ++destroyed;
    }
};

template <typename T, size_t KCount>
class fixed_vector
{
private:
    T m_buffer[KCount];
public:
    fixed_vector()
    {
        // some way to suppress the automatic initialization of m_buffer
    }

    ~fixed_vector()
    {
        // some way to suppress the automatic destruction of m_buffer
    }
};

int main()
{
    {
        fixed_vector<S, 100> arr;
    }

    std::cout << "Created:\t"   << created …
Run Code Online (Sandbox Code Playgroud)

c++ destructor initialization

5
推荐指数
1
解决办法
642
查看次数

标签 统计

c++ ×3

initialization ×2

struct ×2

associative-array ×1

c ×1

destructor ×1

map ×1