• 请不要在回答技术问题时复制粘贴 AI 生成的内容
jccg90
V2EX  ›  程序员

来,看几行 c++代码

  •  
  •   jccg90 · Sep 6, 2016 · 7304 views
  •   You need to sign in to view this topic
    This topic created in 3712 days ago, the information mentioned may be changed or developed.

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

    #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 replies  •  2016-09-08 10:31:59 +08:00
    loading
    loading
    Sep 6, 2016 via Android
    1
    呵呵,真当这里的朋友不是人?
    dtfm
    dtfm
    Sep 6, 2016❤️1
    2
    来,看几行 c++代码
    问,下面这段代码有没有编译器警告

    答,滚犊子
    Lonely
    Lonely
    Sep 6, 2016 via Android
    3
    1 楼说得好
    klaus6d
    klaus6d
    Sep 6, 2016 via Android
    4
    三楼说的好
    visionsmile
    visionsmile
    Sep 6, 2016
    5
    四楼说的好。
    hellov22ex
    hellov22ex
    Sep 6, 2016
    6
    特地打开了个试了下, return 的是 0 。
    imgalaxy
    imgalaxy
    Sep 6, 2016
    7
    codepad.org
    ideone.com

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

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


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

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

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

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

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

    代码往里一贴,点击 compile and run
    BlackKey
    BlackKey
    Sep 7, 2016
    38
    编译器没有义务去警告未定义行为
    phttc
    phttc
    Sep 7, 2016
    39
    C++ 输出难道不是 cout 么。。。到底要看 C 还是 C ++
    missdeer
    missdeer
    Sep 7, 2016
    40
    作为 C++代码,第一行就没写好
    zwindl
    zwindl
    Sep 7, 2016
    41
    来,吃点便便补补脑子。
    1. 不包含 <vector> 就使用 vector
    2. 没有使用 std ,就直接写 vector
    3. 你应该把编译环境说一下
    mozartgho
    mozartgho
    Sep 8, 2016
    42
    我终于知道混 V 站的都是些什么人了!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1297 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 77ms · UTC 21:33 · PVG 05:33 · LAX 13:33 · JFK 16:33
    ♥ Do have faith in what you're doing.