C++小问题

2019-11-10 22:58:52 +08:00
 zhouzhou113

请教两个小问题:

1.规范的代码里面是不可以直接 double a = 0 ;这样写的吗? 应该写成 double a = 0.0 ;的吗? 是出于直接等于 0 会默认为 int 类型造成不必要的类型转换开销的原因吗?

2.类的私有成员变量是不是不应该在类的声明里面初始化 而应该统一放在构造函数里面初始化??

3393 次点击
所在节点    C++
7 条回复
wevsty
2019-11-10 23:20:15 +08:00
1、这个转换是编译器就可以确定的,所以实际上是 0 运行开销。
2、一般类的成员变量都应该在构造函数的初始化列表里进行初始化,和是不是私有成员没有直接的关系。
Raymon111111
2019-11-11 00:09:31 +08:00
1 这种问题基本不用考虑

现代语言编译器是相当厉害的
owt5008137
2019-11-11 10:21:40 +08:00
1. 只是防御性编程地提示一下。以防万一你是想要 int 结果手抖敲成了 double
2. 只有比较高版本的编译器和 c++标准才支持申明初始化。很多环境里是还没使用支持这些新特性的编译器版本的
wutiantong
2019-11-11 11:00:25 +08:00
1. 还这样写: double a{};
2. 没这种说法,但要注意正确的使用场景。
se77en
2019-11-11 14:58:27 +08:00
赞同 4 楼
nightwitch
2019-11-11 15:16:36 +08:00
1. 即使发生了这种开销也可以忽略不计,pod 类型的转换非常快。double a = 0 这种写法,可能有的 Lint 会警告你代码不规范。

2. 能放到 cpp 里面的代码最好放到 cpp 里面去,在类的声明里改动代码的话,所有包含这个类头文件的代码都要重新编译。
canyue7897
2019-11-19 11:07:10 +08:00
1.这种有的编译器会有 warning,但是实际使用没啥毛病。
2.风格比较飘逸,用的时候再初始化。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/618229

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX