问,下面这段代码有没有编译器警告,代码有没有问题,输出结果是多少? 求解答。。。
#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; }
![]() | 1 loading 2016-09-06 19:37:40 +08:00 via Android 呵呵,真当这里的朋友不是人? |
![]() | 2 dtfm 2016-09-06 19:38:50 +08:00 ![]() 来,看几行 c++代码 问,下面这段代码有没有编译器警告 答,滚犊子 |
![]() | 3 Lonely 2016-09-06 19:53:41 +08:00 via Android 1 楼说得好 |
4 klaus6d 2016-09-06 20:01:35 +08:00 via Android 三楼说的好 |
![]() | 5 visionsmile 2016-09-06 20:02:11 +08:00 四楼说的好。 |
![]() | 6 hellov22ex 2016-09-06 20:02:46 +08:00 特地打开了个试了下, return 的是 0 。 |
![]() | 7 imgalaxy 2016-09-06 20:10:12 +08:00 |
8 jccg90 OP @imgalaxy 哈,要是编译器直接能看出来对错,我还费劲发帖子干嘛。。。感觉像是使用了未初始化的内存,但是试了几个编译器都没有问题。。。所以才来问问 |
9 bazingaterry 2016-09-06 20:19:02 +08:00 @jccg90 访问未初始化的内存并不会有警告,编译器根本不知道…… |
![]() | 10 jzy 2016-09-06 20:19:18 +08:00 via iPhone 使用未初始化的变量难道语法上有错吗?为什么编译器要告诉你错? |
11 sgissb1 2016-09-06 20:41:07 +08:00 LZ 不要胡说好吗? 用了 stl 的 vector ,居然连 using namespace std;这个申明都不要吗? 还有你只 #include<stdio.h> 是什么意思? 你到底有没有在编译器里面跑过?要不你说说你在什么编译器里面跑过 |
12 zhongkaixin 2016-09-06 20:46:40 +08:00 现在某些 90 后,连最基本的礼貌都不懂了 |
![]() | 13 jmc891205 2016-09-06 21:06:56 +08:00 b 的值是由 Info 的默认构造函数初始化的 并不是未初始化。 至于它初始化用的是 0.0 还是用一个随机值 不同的编译器有不同的实现。 |
14 KingHL 2016-09-06 21:13:39 +08:00 vector 中的 info 对象是在存在在 getInfoList 这个函数的调用栈上的,碰巧能打印出来是因为栈空间还没有被覆盖,不知道是不是我说的这样, c++好久没用了。 |
15 KingHL 2016-09-06 21:15:37 +08:00 另外,楼主的这种提问方式,也是醉了,最起码你把程序写对了吧。 |
![]() | 17 chai2010 2016-09-06 21:18:43 +08:00 via iPhone printf %d ,还是先把 C 语言弄清楚吧 |
![]() | 19 jmc891205 2016-09-06 21:24:47 +08:00 @yangff 是啊 copy 的时候调用默认拷贝构造函数 copy 之后的值还是等于 Info info 时默认构造函数用来初始化 b 的值 |
21 bp0 2016-09-06 21:48:44 +08:00 好混搭的代码。 |
22 qua 2016-09-06 21:54:15 +08:00 via iPhone info.b 没初始化啊 |
23 qua 2016-09-06 21:55:32 +08:00 via iPhone 这么简单的问题有什么好讨论的 |
24 owt5008137 2016-09-06 22:41:34 +08:00 via Android 有没有 warning 取决于你的编译选项,如果开全了 warning 的话会有 warning 另外,一定会编译 error ,原因如 @sgissb1 所说。虽然可以默认包含某些头文件,但是我所知的任何一个环境都不会自动 #include<vector> 最后问输出什么?这取决于你的编译器、编译选项、 runtime 库,还有硬件环境。所以你问会输出什么?鬼知道 |
![]() | 25 kingddc314 2016-09-06 23:17:30 +08:00 局部变量的默认初始化具有不确定性,虽然这里打印是 0.0 ,但是后面再加上一个 int c; 成员后,打印的 b 却变成了随机值,应该是看编译器实现。所以不能依赖局部变量默认构造函数。全局变量的默认初始化则是零值了。 另外实在没编译器也可以试试在线编译器,如 http://webcompiler.cloudapp.net/ |
![]() | 26 veelog 2016-09-06 23:20:49 +08:00 via Android 不知道这几行代码有什么意思。。。。 |
![]() | 28 josephshen 2016-09-07 00:38:41 +08:00 via iPhone 有些人不光是不会啊而且是胡说啊,回国之后 v 站水平下降不少啊 |
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 楼主你开心就好:) |
![]() | 30 htfy96 2016-09-07 07:19:11 +08:00 via Android 其实 include stdio.h 就可以给你报编译错误… |
31 LigeLaige 2016-09-07 08:24:41 +08:00 难道不需要 #include <vector> 吗? |
33 lzhCoooder 2016-09-07 09:50:59 +08:00 GCC 打开 -wall 试试 |
![]() | 34 mN71eOOprFyMsnPx 2016-09-07 10:08:53 +08:00 |
![]() | 35 jmc891205 2016-09-07 10:30:46 +08:00 @zby0826 现在程序员都不从 C/C++开始入门啦 都是从 Python 、 Javascript 开始学 不懂这些东西也正常 |
![]() | 36 araraloren 2016-09-07 11:05:47 +08:00 @jmc891205 楼主问问题的态度不怎么好吧。。 至少该说说自己到底是怎么搞的,遇到了什么问题。。 |
37 hitmanx 2016-09-07 13:38:53 +08:00 |
![]() | 38 BlackKey 2016-09-07 16:15:43 +08:00 编译器没有义务去警告未定义行为 |
![]() | 39 phttc 2016-09-07 17:02:36 +08:00 C++ 输出难道不是 cout 么。。。到底要看 C 还是 C ++ |
40 missdeer 2016-09-07 17:16:22 +08:00 作为 C++代码,第一行就没写好 |
41 zwindl 2016-09-07 19:44:36 +08:00 来,吃点便便补补脑子。 1. 不包含 <vector> 就使用 vector 2. 没有使用 std ,就直接写 vector 3. 你应该把编译环境说一下 |
![]() | 42 mozartgho 2016-09-08 10:31:59 +08:00 我终于知道混 V 站的都是些什么人了! |