【问题标题】:How do I initialize a pointer in a struct to null in C++11?如何在 C++11 中将结构中的指针初始化为 null?
【发布时间】:2013-12-15 16:25:35
【问题描述】:

这是我的结构:

struct node {
    int load;
    int tolerance;
    bool has_fired;
    node *in[1];
    node *out[1];
    };

我试过了:

node mynode;

mynode->in = null;
mynode->in = nullptr;
mynode->in = &nullptr;
mynode->in = 0;
mynode->in = false;

我真的不知道出了什么问题,我记得第一个任务用于工作,但显然不再。有什么帮助吗?

编辑:在实际源文件中,'mynode' 是另一个结构内的指针。

【问题讨论】:

  • 在您的代码中,'in' 是一个只有 1 个元素的数组,该数组是指向节点的指针类型。您不能将数组初始化为 null。
  • 只有一个元素的数组有什么意义?
  • 我想知道你为什么要组成一个包含一个元素的数组?有什么特殊原因或需要吗?
  • 一个元素数组是占位符,我现在不知道最终结果中会有多少元素。
  • @fatalkeystroke 在运行时不起作用。

标签: c++ pointers c++11


【解决方案1】:

可能是这样的:

struct node
{
    int load;
    int tolerance;
    bool has_fired;
    node *in[1] = { nullptr };
    node *out[1] = { nullptr };
};

(注意node::innode::out指针数组。)

用法:

node n;    // n.in and n.out are initialized

在 C++11 中,大括号或相等初始化器使类成为非聚合类。如果这是一个问题,你也可以省略初始化器并说:

node n;
n.in[0] = nullptr;
n.out[0] = nullptr;

甚至:

node n { 0, 0, false,  { nullptr }, { nullptr } };

【讨论】:

    【解决方案2】:

    尝试值初始化:

    node mynode{};
    

    这将对所有成员进行值初始化,这对于内置和 PODS 意味着零初始化。

    【讨论】:

    • 绝对是个好答案。我想区别在于 OP 是要初始化特定对象,还是要为整个类提供初始化语义。很高兴有多种选择。
    【解决方案3】:

    创建一个构造函数?

    struct node
    {
        node()
            : in{{ nullptr }}, out{{ nullptr }}
        {}
    
        ...
    };
    

    【讨论】:

      【解决方案4】:

      这是赋值而不是初始化。由于in 是一个指针数组,因此您必须将数组元素设置为空。另外mynode 不是指针,所以不要使用箭头运算符。

      mynode.in[0] = nullptr;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多