gpt4 book ai didi

c++ - 在类初始化和初始化列表中

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:30 26 4
gpt4 key购买 nike

我最近发现你不能同时拥有类初始化和初始化列表。以下代码失败:

struct s
{
int i=0;
};
int main() {
s s1; //s1.i = 0
//s s2={42}; //fails
return 0;
}

如果我删除类内初始化,初始化列表就可以正常工作!

有人能解释一下为什么不允许这样的事情吗?

最佳答案

事实上,这在 C++14 中是允许的。

struct s
{
int i=0;
};

int main() {
s s1;
s s2 = {42}; // succeeds
}

很可能您的编译器没有在 C++14 中实现新规则。然而,最新版本的 clang 接受这一点并在 C++14 模式下做正确的事情。

当类内初始化被添加到 C++11 时,它被指定为防止类成为聚合。这样做是因为当时聚合概念与需要简单构造的 PoD 类型密切相关。具有类内初始化意味着类型不再是简单可构造的。然而,从那时起,这两个概念变得更加独立,因此对于 C++14,一个覆盖该决定的简短提案被接受。

关于c++ - 在类初始化和初始化列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19452285/

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