gpt4 book ai didi

C++删除构造函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:56 24 4
gpt4 key购买 nike

假设我有这个结构:

struct F
{
int& ref; // reference member
const int c; // const member
// F::F() is implicitly defined as deleted
};

那是来自 cppreference。正如我从文档中了解到的那样,F 的构造函数被认为已删除,因为它有一个引用变量,该变量不引用任何内容。所以不能像这样声明 F 类型的变量: F variableName; 因为会出现这样的错误: uninitialized reference member in struct F .

我理解这一点,但是我不明白如果您甚至不能声明其类型的变量,这样的结构有什么用。这样的数据类型在某些特定情况下有用吗?

最佳答案

由于 F 是一个集合,您可以使用 aggregate initialization :

int a = 42;
F f1 = {a, 13};

// or

F f2{a, 9};

Live demo .

一个类类型(通常是结构体或 union 体)是一个聚合,如果它有:

  • no private or protected non-static data members
  • no user-provided, inherited, or explicit (since C++17) constructors (explicitly defaulted or deleted constructors are allowed) (since C++11)
  • no virtual, private, or protected (since C++17) base classes
  • no virtual member functions

关于C++删除构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50112986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com