V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhouzhou113
V2EX  ›  C++

C++小问题

  •  
  •   zhouzhou113 · 2019-11-10 22:58:52 +08:00 · 3321 次点击
    这是一个创建于 1838 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教两个小问题:

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

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

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

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

    2. 能放到 cpp 里面的代码最好放到 cpp 里面去,在类的声明里改动代码的话,所有包含这个类头文件的代码都要重新编译。
    canyue7897
        7
    canyue7897  
       2019-11-19 11:07:10 +08:00
    1.这种有的编译器会有 warning,但是实际使用没啥毛病。
    2.风格比较飘逸,用的时候再初始化。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1932 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:17 · PVG 00:17 · LAX 08:17 · JFK 11:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.