想问一下 VS 里边 C++的初始化列表的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SupperMary
V2EX    C

想问一下 VS 里边 C++的初始化列表的问题

  •  
  •   SupperMary 2019-03-17 16:19:34 +08:00 2950 次点击
    这是一个创建于 2408 天前的主题,其中的信息可能已经有所发展或是发生改变。

    代码如图:

    请注意变量声明顺序和初始化列表的顺序。

    在 Visual Studio 编译和运行都没有问题

    在 g++ 使用 -Wall 参数时会显示下面的警告:

    Visual Studio 我已经试过警告等级 4,并不会提示这个警告,若是启用全部警告,则会输出相当多的警告信息,全部指向 VS 自己的头文件。

    我想问一下 Visual Studio 对初始化列表顺序和变量声明顺序不同的情况是不是不进行判断?若是可以进行判断的话,从哪里打开这个选项?

    我确实没搜索到相关的信息。

    2 条回复    2019-03-17 17:31:00 +08:00
    justou
        1
    justou  
       2019-03-17 17:12:17 +08:00   2
    这个警告的意图是说明: 初始化顺序是按数据成员在类中的声明顺序来进行的, 不是按写在构造函数的初始化列表的顺序进行的.

    这个其实并不是啥问题, 只要不在初始化列表中形成初始化的依赖, 比如说:
    声明顺序为 n1, n2, 构造函数 A(): n2(2), n1(n2){} 是首先初始化 n1 的(用 n2 的值), 但是此时 n2 还没初始化, 所以最后 n1 的值是未定义的, n2 为 2

    如果无法避免地有一些变量的初始化依赖另一些变量的初始化, 这些依赖其它的变量都放到构造函数的函数体中去初始化(良好习惯是尽量保持声明顺序与初始化顺序一致)

    VS 的话, 找了下编译器文档
    https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warnings-by-compiler-version?view=vs-2017#warnings-introduced-in-visual-c-2017-version-153-compiler-version-1911255060

    C5038 data member 'member1' will be initialized after data member 'member2'

    compiler version 19.11.25506.0 才引入的这个警告耶

    提示: 开启全部警告后, 不要 include 任何标准库或其它头文件来测试编译, 不然一堆警告, 很难找到你想看的警告
    SupperMary
        2
    SupperMary  
    OP
       2019-03-17 17:31:00 +08:00
    @justou #1 会问这个是英文确实遇到了初始化列表中的变量依赖问题,问题中的代码是我单独写的,不过去掉头文件再编译这个方法很有意思,不过也挺蛋疼的,也不是特别严重的问题,根据 g++ 的警告信息已经修复了,感谢你的答案。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4759 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 41ms UTC 01:09 PVG 09:09 LAX 18:09 JFK 21:09
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86