来,看几行 c++代码 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
jccg90
V2EX    程序员

来,看几行 c++代码

  •  
  •   jccg90 2016-09-06 19:35:56 +08:00 6398 次点击
    这是一个创建于 3324 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问,下面这段代码有没有编译器警告,代码有没有问题,输出结果是多少? 求解答。。。

    #include<stdio.h> struct Info { bool a; double b; }; void getInfoList( vector<Info> & infoList) { Info info; info.a = true; infoList.push_back(info); } int main() { vector<Info> infoList; getInfoList( infoList); for (vector<Info>::iterator It = infoList.begin(); It != infoList.end(); It++) { printf("%f",(*It).b); } return 0; } 
    42 条回复    2016-09-08 10:31:59 +08:00
    loading
        1
    loading  
       2016-09-06 19:37:40 +08:00 via Android
    呵呵,真当这里的朋友不是人?
    dtfm
        2
    dtfm  
       2016-09-06 19:38:50 +08:00   1
    来,看几行 c++代码
    问,下面这段代码有没有编译器警告

    答,滚犊子
    Lonely
        3
    Lonely  
       2016-09-06 19:53:41 +08:00 via Android
    1 楼说得好
    klaus6d
        4
    klaus6d  
       2016-09-06 20:01:35 +08:00 via Android
    三楼说的好
    visionsmile
        5
    visionsmile  
       2016-09-06 20:02:11 +08:00
    四楼说的好。
    hellov22ex
        6
    hellov22ex  
       2016-09-06 20:02:46 +08:00
    特地打开了个试了下, return 的是 0 。
    imgalaxy
        7
    imgalaxy  
       2016-09-06 20:10:12 +08:00
    codepad.org
    ideone.com

    装个 Dev-C++能几分钟
    jccg90
        8
    jccg90  
    OP
       2016-09-06 20:13:14 +08:00
    @imgalaxy 哈,要是编译器直接能看出来对错,我还费劲发帖子干嘛。。。感觉像是使用了未初始化的内存,但是试了几个编译器都没有问题。。。所以才来问问
    bazingaterry
        9
    bazingaterry  
       2016-09-06 20:19:02 +08:00
    @jccg90 访问未初始化的内存并不会有警告,编译器根本不知道……
    jzy
        10
    jzy  
       2016-09-06 20:19:18 +08:00 via iPhone
    使用未初始化的变量难道语法上有错吗?为什么编译器要告诉你错?
    sgissb1
        11
    sgissb1  
       2016-09-06 20:41:07 +08:00
    LZ 不要胡说好吗?

    用了 stl 的 vector ,居然连 using namespace std;这个申明都不要吗?
    还有你只
    #include<stdio.h>
    是什么意思?


    你到底有没有在编译器里面跑过?要不你说说你在什么编译器里面跑过
    zhongkaixin
        12
    zhongkaixin  
       2016-09-06 20:46:40 +08:00
    现在某些 90 后,连最基本的礼貌都不懂了
    jmc891205
        13
    jmc891205  
       2016-09-06 21:06:56 +08:00
    b 的值是由 Info 的默认构造函数初始化的 并不是未初始化。
    至于它初始化用的是 0.0 还是用一个随机值 不同的编译器有不同的实现。
    KingHL
        14
    KingHL  
       2016-09-06 21:13:39 +08:00
    vector 中的 info 对象是在存在在 getInfoList 这个函数的调用栈上的,碰巧能打印出来是因为栈空间还没有被覆盖,不知道是不是我说的这样, c++好久没用了。
    KingHL
        15
    KingHL  
       2016-09-06 21:15:37 +08:00
    另外,楼主的这种提问方式,也是醉了,最起码你把程序写对了吧。
    yangff
        16
    yangff  
       2016-09-06 21:17:59 +08:00
    @jmc891205
    @KingHL
    ... push_back 是会复制(移动)的啊……
    chai2010
        17
    chai2010  
       2016-09-06 21:18:43 +08:00 via iPhone
    printf %d ,还是先把 C 语言弄清楚吧
    liuxu
        18
    liuxu  
       2016-09-06 21:19:05 +08:00
    @sgissb1 233,C++如果要用 c 的头文件,要用#include <cstdio>这样的格式
    jmc891205
        19
    jmc891205  
       2016-09-06 21:24:47 +08:00
    @yangff 是啊 copy 的时候调用默认拷贝构造函数 copy 之后的值还是等于 Info info 时默认构造函数用来初始化 b 的值
    yangff
        20
    yangff  
       2016-09-06 21:26:09 +08:00
    @jmc891205 我要回复 @KingHL 来着的……
    bp0
        21
    bp0  
       2016-09-06 21:48:44 +08:00
    好混搭的代码。
    qua
        22
    qua  
       2016-09-06 21:54:15 +08:00 via iPhone
    info.b 没初始化啊
    qua
        23
    qua  
       2016-09-06 21:55:32 +08:00 via iPhone
    这么简单的问题有什么好讨论的
    owt5008137
        24
    owt5008137  
       2016-09-06 22:41:34 +08:00 via Android
    有没有 warning 取决于你的编译选项,如果开全了 warning 的话会有 warning

    另外,一定会编译 error ,原因如 @sgissb1 所说。虽然可以默认包含某些头文件,但是我所知的任何一个环境都不会自动 #include<vector>

    最后问输出什么?这取决于你的编译器、编译选项、 runtime 库,还有硬件环境。所以你问会输出什么?鬼知道
    kingddc314
        25
    kingddc314  
       2016-09-06 23:17:30 +08:00
    局部变量的默认初始化具有不确定性,虽然这里打印是 0.0 ,但是后面再加上一个 int c; 成员后,打印的 b 却变成了随机值,应该是看编译器实现。所以不能依赖局部变量默认构造函数。全局变量的默认初始化则是零值了。

    另外实在没编译器也可以试试在线编译器,如 http://webcompiler.cloudapp.net/
    veelog
        26
    veelog  
       2016-09-06 23:20:49 +08:00 via Android
    不知道这几行代码有什么意思。。。。
    zby0826
        27
    zby0826  
       2016-09-06 23:54:13 +08:00
    看了这么多回复,也就 @jmc891205 正解……其他要么不会,要么挑刺,感觉 v 站 c++程序员太少。
    josephshen
        28
    josephshen  
       2016-09-07 00:38:41 +08:00 via iPhone
    有些人不光是不会啊而且是胡说啊,回国之后 v 站水平下降不少啊
    azh7138m
        29
    azh7138m  
       2016-09-07 00:54:51 +08:00
    ```

    /tmp/480407296/main.cpp:9:6: error: variable has incomplete type 'void'
    void getInfoList( vector<Info> & infoList)
    ^
    /tmp/480407296/main.cpp:9:19: error: use of undeclared identifier 'vector'
    void getInfoList( vector<Info> & infoList)
    ^
    /tmp/480407296/main.cpp:9:26: error: 'Info' does not refer to a value
    void getInfoList( vector<Info> & infoList)
    ^
    /tmp/480407296/main.cpp:3:8: note: declared here
    struct Info
    ^
    /tmp/480407296/main.cpp:9:34: error: use of undeclared identifier 'infoList'
    void getInfoList( vector<Info> & infoList)
    ^
    /tmp/480407296/main.cpp:9:43: error: expected ';' after top level declarator
    void getInfoList( vector<Info> & infoList)
    ^
    ;
    5 errors generated.

    ```

    https://glot.io/snippets/ei75xmvvui

    楼主你开心就好:)
    htfy96
        30
    htfy96  
       2016-09-07 07:19:11 +08:00 via Android
    其实 include stdio.h 就可以给你报编译错误…
    LigeLaige
        31
    LigeLaige  
       2016-09-07 08:24:41 +08:00
    难道不需要 #include <vector> 吗?
    KingHL
        32
    KingHL  
       2016-09-07 09:39:37 +08:00
    @yangff 恩,抱歉是我学艺不精说错了。
    lzhCoooder
        33
    lzhCoooder  
       2016-09-07 09:50:59 +08:00
    GCC 打开 -wall 试试
    jmc891205
        35
    jmc891205  
       2016-09-07 10:30:46 +08:00
    @zby0826 现在程序员都不从 C/C++开始入门啦 都是从 Python 、 Javascript 开始学 不懂这些东西也正常
    araraloren
        36
    araraloren  
       2016-09-07 11:05:47 +08:00
    @jmc891205 楼主问问题的态度不怎么好吧。。
    至少该说说自己到底是怎么搞的,遇到了什么问题。。
    hitmanx
        37
    hitmanx  
       2016-09-07 13:38:53 +08:00
    你可能需要这个网站:
    http://coliru.stacked-crooked.com/

    代码往里一贴,点击 compile and run
    BlackKey
        38
    BlackKey  
       2016-09-07 16:15:43 +08:00
    编译器没有义务去警告未定义行为
    phttc
        39
    phttc  
       2016-09-07 17:02:36 +08:00
    C++ 输出难道不是 cout 么。。。到底要看 C 还是 C ++
    missdeer
        40
    missdeer  
       2016-09-07 17:16:22 +08:00
    作为 C++代码,第一行就没写好
    zwindl
        41
    zwindl  
       2016-09-07 19:44:36 +08:00
    来,吃点便便补补脑子。
    1. 不包含 <vector> 就使用 vector
    2. 没有使用 std ,就直接写 vector
    3. 你应该把编译环境说一下
    mozartgho
        42
    mozartgho  
       2016-09-08 10:31:59 +08:00
    我终于知道混 V 站的都是些什么人了!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3511 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 51ms UTC 10:39 PVG 18:39 LAX 03:39 JFK 06:39
    Do have faith in what you're doing.
    ubao 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