gpt4 book ai didi

c++ - 为什么具有私有(private)成员的聚合不支持 C++ 大括号初始化?

转载 作者:行者123 更新时间:2023-11-30 02:21:21 24 4
gpt4 key购买 nike

在我看来,从概念上讲,以下内容并未侵犯隐私。但这是被禁止的。

struct A
{
int a;
int b;
int c;
};
struct B
{
int a;
int b;
private:
int c;
};

int main (int argc, char * argv[])
{
auto a = A{1,2,3}; //ok
auto b = A{1,2}; //ok
auto c = B{1,2,3}; //error
auto d = B{1,2}; //error
return 0;
}

添加手动构造函数将允许对私有(private)成员进行大括号初始化。但是聚合和 Pod 的美妙之处在于您需要的编码量很少,因此这很烦人。

另一方面,this is a privacy breach in my opinion但这是标准允许的。

最佳答案

不存在具有私有(private)或 protected 非静态数据成员的聚合之类的东西。聚合的所有非静态数据成员都必须是公共(public)的。

private:
int c;

导致 B 不再是聚合。因此聚合初始化不再起作用。

关于c++ - 为什么具有私有(private)成员的聚合不支持 C++ 大括号初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48434606/

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