实在不懂,求问这段代码是不是踩了未定义行为的坑
資深大佬 : Caturra 75
#include<iostream> #include<vector> using namespace std; struct test { vector<int> vec; test() : vec(1) {} int new_node(int i) { int n = vec.size(); vec.push_back(i); return n; } void func(int i) { vec[0] = new_node(i); cout << vec[0] << endl; } }; int main() { test t; for(int i = 0; i < 5; i++) t.func(i); return 0; }
(原代码比较复杂,这里经过化简,就是vec[0]存当前的长度,每次func就vec后面加一个数)
学的工地 C++,感觉好像没什么特别的实现,但就是产生奇怪的问题
本地用比较旧的 G++会产生运行时错误
而找了其它的在线 IDE 下,C++11 会输出
0 0 3 3 5
而在 C++17 下是我所期望的
1 2 3 4 5
想问问 V 友们这个具体出现的问题是哪里,要怎样才能规避这种现象
大佬有話說 (7)