为什么return之后的语句会改变返回值?
Why do statements after return change the return value?
c++在以下代码中返回无效值:
#include <iostream>
#include <vector>
using namespace std;
int f(){
vector< int * > v[2];
return 1;
v[1].push_back(NULL);
}
int main(){
cout << f();
}
输出为:
205960
当我在返回后注释行时,它工作正常:
#include <iostream>
#include <vector>
using namespace std;
int f(){
vector< int * > v[2];
return 1;
//v[1].push_back(NULL);
}
int main(){
cout << f();
}
输出为:
1
我使用代码::块与mingw32-g++.exe编译器。mingw版本为:gcc version 4.4.1 (TDM-2 mingw32)
你的编译器有一个bug。幸运的是,它也过时了。你应该升级——g++的版本是4.6.2,它也实现了c++ 11的大部分功能,非常有用。
如果你选择坚持使用旧的编译器,那也是接受它的缺陷的决定。
Edit:如果您真的坚持4.4(例如由于PHB),该系列仍然保持。您可以升级到今年4月刚刚发布的GCC 4.4.6。
相关文章:
- 从python中调用C++函数并获取返回值
- 为什么模板类中的对象不能返回值
- 返回值优化:显式移动还是隐式
- lock_guard是否保护返回值
- 调用CreateProcess()并获取字符串的返回值
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 查找 GCD:并非所有控制路径都返回值
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 如何从 std::thread 返回值
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- 方法错误"not all control paths return a value"和方法不返回值
- 如何读取 C++ SAFEARRAY**,该 SAFEARRAY** 是 COM 互操作的结果,其中 C# 返回值为
- 对fread的返回值感到困惑
- 程序不向函数返回值
- 改变字符串的副本并返回值,而不是更改原始字符串
- 为什么return之后的语句会改变返回值?
- 改变基本类型和类类型的返回值
- 系列.println改变函数返回值(Arduino)