【问题标题】:designated Initialization of a Node with a pointer (C++)用指针指定节点的初始化 (C++)
【发布时间】:2021-02-18 10:14:36
【问题描述】:

在链表中创建新节点时,如下所述使用指定初始化器来初始化节点的成员是否合法? 这样做有什么影响吗?有什么更好的方法来达到同样的结果? (语言:C++)

Node *temp = new Node{.data = value, .next = NULL};
struct Node
{
    int data;
    Node *next;
};

【问题讨论】:

  • 对我来说这看起来像 C++。如果是这样,您应该删除 C 标记并添加 C++ 标记。
  • 指定初始化器是 C 标准而不是 C++ 标准。
  • Node *temp = new Node{.data = value, .next = NULL}; 是 C++,但您标记了 C,所以存在矛盾。请澄清。
  • @SameerAhmed 好,然后是edit 问题。不要解释你应该做什么,而是去做。
  • 我很困惑,因为你说它是 C++,问题现在被标记为 C++,但你接受了 C 答案。它到底是什么?

标签: linked-list initialization heap-memory c++20 designated-initializer


【解决方案1】:

我认为你可以将函数用作构造函数。

Node* newFunction(int data) { 
  Node* newNode = malloc(sizeof(Node));
  newNode->data=data;
  newNode->next=NULL;
  return newNode;
}

然后,您可以像这样在主要部分中使用;

Node* newNode = newFunction(5);

【讨论】:

  • malloc 无法构造 C++ 对象。它只是分配内存
  • @largest_prime_is_463035818 当我写这个解决方案时,他要求使用 C 语言。
  • 我知道,但与此同时标签已更改,OP 澄清他们的代码是 C++。我只是想发表评论,因为在 C++ 中,这个答案可能被认为是错误的,而不是你的错
  • 是的,你是对的。直到您通知我,我才意识到标签已更改。我猜当标签改变时,我们不能接受任何通知。
猜你喜欢
  • 1970-01-01
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
  • 1970-01-01
相关资源
最近更新 更多