gpt4 book ai didi

c++ - 为什么我的编译器无法识别 "Bond() = default;"?

转载 作者:IT老高 更新时间:2023-10-28 12:30:29 27 4
gpt4 key购买 nike

请看这段代码

class Bond
{
public:
Bond(int payments_per_year, int period_lengths_in_months);
Bond() = default;

private:
const int payments_per_year;
const int period_length_in_months;
};

int main()
{
Bond b; // Error here
}

尝试编译时出现错误:

error C2280: 'Bond::Bond(void)': attempting to reference a deleted function".

这不是违反“3 规则”,因为我已经添加了默认构造函数。

为什么编译器不能识别Bond() = default;

最佳答案

默认构造函数是被抑制的,因为有需要显式初始化的常量成员。

因此,由于这种抑制,编写 Bond() = default 确实不会重新引入默认构造函数。

(你可以通过移除类中的所有构造函数来看到这个效果——你仍然不能实例化一个b。)

如果您从成员中删除 const,那么一切都会好起来的;尽管另一种选择是为每个 const 成员提供一个 brace-or-equal-initializer

const int payments_per_year = 2;
const int period_length_in_months = 6;

例如。

关于c++ - 为什么我的编译器无法识别 "Bond() = default;"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53225106/

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