C++教材有这样一道课后练习,通过观察两个人逐年的年龄变化让读者理解i++与++i的区别。练习题源代码如下:
#include<iostream>
using namespace std;
int main()
{
int myAge=39;
int yourAge=39;
cout<<"I am: "<<myAge<<"years old."<<endl;
cout<<"You are: "<<yourAge<<"years old."<<endl;
myAge++;
++yourAge;
cout<<"One year passes..."<<endl;
cout<<"I am: "<<myAge<<"years old."<<endl;
cout<<"You are: "<<yourAge<<"years old."<<endl;
myAge++;
++yourAge;
cout<<"Another year passes..."<<endl;
cout<<"I am: "<<myAge++<<"years old."<<endl;
cout<<"You are: "<<++yourAge<<"years old."<<endl;
cout<<"Let's print it again."<<endl;
cout<<"I am: "<<myAge<<"years old."<<endl;
cout<<"You are: "<<yourAge<<"years old."<<endl;
return 0;
}
如果是我自己手动算,最终的结果是如下:
I am: 39years old.
You are: 39years old.
One year passes...
I am: 40years old.
You are: 40years old.
Another year passes..
I am: 40years old.
You are: 41years old.
Let's print it again.
I am: 41years old.
You are: 41years old.
但是用dev编译器得到的运行结果如下:
I am: 39years old.
You are: 39years old.
One year passes...
I am: 40years old.
You are: 40years old.
Another year passes..
I am: 41years old.
You are: 42years old.
Let's print it again.
I am: 42years old.
You are: 42years old.
教材中有两句话是这样说的:
int i=1;
cout<<i++; //首先使i自增为2,然后输出i自增前的值1
cout<<++i; //首先使i自增为2,然后输出i的当前值2
请问是哪里出问题了呢?编译器会不会出错?(之前学C的时候就听说过不同编译器对自增自减这类运算有不同的运行结果)答案应该是什么样的呢?
前++,后++都是运算符,运算符说到底,就是一个函数,函数的功能具体要看实现,但大多时候有这样的约定,比如C/C++已经实现的这些操作(int和指针的++操作),i++一般是返回i自增前的值,++i是返回自增后的值,刚开始不懂你可以记一下,谁在左边,就先返回谁
你可以用下面的代码测试一下
#include <iostream>
using namespace std;
int pre(int& i) { //i++;
int t = i;
//return post(i);
i = i + 1;
return t; //返回增加前的值
}
int post( int& i) { //++i
i = i + 1;
return i;
}
int main() {
int a = 1, b = 1;
cout << a++ << pre(b) << endl;
cout << ++a << post(b) << endl;
return 0;
}
i=1;
i++ ,这个整体等于1,i等于2
++i, 这个整体等于2,i等于2。
自己感悟。