vi 发帖数: 309 | 1 奇怪的问题,谁帮忙看一下,谢谢!
int main()
{
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
list tlist(arr, arr+(sizeof(arr)/sizeof(int)));
int psum;
for_each(tlist.begin(), tlist.end(), [&psum](int &_val) {
_val += psum;
psum = _val;
});
for (auto _val: tlist) { cout << _val << " "; };
cout << endl;
cout << *(tlist.begin());
}
g++ default:
$2 4 7 11 16 22 29 37 46
2$
if compile with -O1 then it will produce the correct output:
$1 3 6 10 15 21 28 36 45
1$ |
f******y 发帖数: 2971 | 2 一个很明显的问题是psum没有初始化。
【在 vi 的大作中提到】 : 奇怪的问题,谁帮忙看一下,谢谢! : int main() : { : int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; : list tlist(arr, arr+(sizeof(arr)/sizeof(int))); : int psum; : for_each(tlist.begin(), tlist.end(), [&psum](int &_val) { : _val += psum; : psum = _val; : });
|
c*****t 发帖数: 421 | 3
You are right, thank you!
But why?
【在 f******y 的大作中提到】 : 一个很明显的问题是psum没有初始化。
|
t****t 发帖数: 6806 | 4 马甲?
什么叫why, 人不都已经跟你说why了吗?
【在 c*****t 的大作中提到】 : : You are right, thank you! : But why?
|
m*******l 发帖数: 12782 | 5 她问的是为什么 不初始化会出现这个结果
你怎么回答她?
【在 t****t 的大作中提到】 : 马甲? : 什么叫why, 人不都已经跟你说why了吗?
|
t****t 发帖数: 6806 | 6 不初始化各种奇怪的结果都有可能出现啊...
【在 m*******l 的大作中提到】 : 她问的是为什么 不初始化会出现这个结果 : 你怎么回答她?
|
b*******s 发帖数: 5216 | 7 新的标准下编译器会初始化成0
【在 f******y 的大作中提到】 : 一个很明显的问题是psum没有初始化。
|
m*******l 发帖数: 12782 | 8 真的么?我怎么不记得?
【在 b*******s 的大作中提到】 : 新的标准下编译器会初始化成0
|
b*******s 发帖数: 5216 | 9 前段时间看到一个人的blog,都是让你猜一些代码在新标准下的表现的,我找找看,标
准我还没仔细读过
【在 m*******l 的大作中提到】 : 真的么?我怎么不记得?
|
b*******s 发帖数: 5216 | 10 http://cppquiz.org/quiz/question/18
里面的某一题
【在 m*******l 的大作中提到】 : 真的么?我怎么不记得?
|
m*******l 发帖数: 12782 | 11 你说的是类成员吧.
这个是local primitive
【在 b*******s 的大作中提到】 : 前段时间看到一个人的blog,都是让你猜一些代码在新标准下的表现的,我找找看,标 : 准我还没仔细读过
|
b*******s 发帖数: 5216 | 12 哦,我没仔细读过,看了一眼,最近没空
【在 m*******l 的大作中提到】 : 你说的是类成员吧. : 这个是local primitive
|
d****n 发帖数: 1241 | 13 可以解释说是标准规定了的,这样的行为属于undefined behavior...
【在 m*******l 的大作中提到】 : 她问的是为什么 不初始化会出现这个结果 : 你怎么回答她?
|