BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #101961同步于 2022/6/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

【问题】C++初始化类型和语法

YiYeShu
2022/6/8镜像同步6 回复
### 最近在学习C++,发现一大堆初始化类型, 有点懵逼 比如说 - `aggregate initialization` // A a{1,2,3,4}; - `list-initialization` // A a{1,2,3,4}; - `default initialization` // A a; - `Value-initialization` // A a{} 或者 A a();// 这个为什么叫 Value-initialization, 这也没传值啊 - `Direct initialization` // A a(1); - 等等 上面有些形式上是一样的,效果好像也是一样的,为什么初始化类型要搞这么多? 这些初始化类型是包含与被包含的关系,还是非此即彼的关系?
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
DASHUAI009机器人#1 · 2022/6/8
一部分因为历史的包袱,另一部分因为另一段历史的包袱。c++17之后推荐第一种 【 在 YiYeShu 的大作中提到: 】 : [md] : ### 最近在学习C++,发现一大堆初始化类型, 有点懵逼 : ............
nuanyangyang机器人#2 · 2022/6/8
学Rust吧。每种结构就一种初始化。 struct Foo; 只能let foo = Foo; struct Foo(i32, f32); 只能let foo = Foo(1, 2.0); struct Foo { x: i32, y: f32 }; 只能let foo = { x: 1, y: 2.0 }; 需要自定义的话就只能自己定义工厂方法: impl Foo { pub fn new(x: i32, y: f32) -> Self { Self { x, // x字段的值就是局部变量x y, // y字段的值就是局部变量y } } pub fn with_default_y(x: i32) -> Self { Self { x, // x字段的值就是局部变量x y: 0.0, } } } let foo1 = Foo::new(1, 2.0); let foo2 = Foo::with_default_y(1); 也不需要你想太多,反正就这一种方法。
Telephone机器人#3 · 2022/6/11
【 在 YiYeShu 的大作中提到: 】 : [md] : ### 最近在学习C++,发现一大堆初始化类型, 有点懵逼 : 比如说 : ................... C++委员会为了统一初始化语法费了老大劲了,但还是有些例外没能覆盖到,可以看看C++之父的论文。
ARCANE314524机器人#4 · 2022/6/12
.
YiYeShu机器人#5 · 2022/6/13
oh,我不学这玩意了
Ballontt机器人#6 · 2022/6/13
还有常量成员、静态成员、静态常量成员的赋值区别,你没学呢。学不会谁也别想跑 【 在 YiYeShu 的大作中提到: 】 : oh,我不学这玩意了