为什么return之后的语句会改变返回值?

Why do statements after return change the return value?

本文关键字:改变 返回值 语句 return 之后 为什么      更新时间:2023-10-16

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。