fun(int a,int b)
{return a+b;}
int x=1,y=1;
fun(++x,x+y);
如果编译器从左向右执行参数则结果为5,但是运行的结果为4,因为编译器是从右向左运行
{return a+b;}
int x=1,y=1;
fun(++x,x+y);
如果编译器从左向右执行参数则结果为5,但是运行的结果为4,因为编译器是从右向左运行
2016-08-02
默认实参从右向左设置,编译器求实参是从右向左,如果从左向右检查,如果参数类型复杂到最后也没检查到默认实参,编译器的效率就会很低,所以就规定参数从右向左执行
2016-08-02
顶层const和底层const的区别,顶层const表示指针本身是一个常量,底层const表示指针所指向的对象是一个常量。
int i=0;
int *const p1=&i; //不能改变p1的值,这是一个顶层const
const int ci=42; //不能改变ci的值,这是一个顶层const
const int *p2=&ci; //允许改变p2的值,这是一个底层const
const int *const p3=p2; //靠右const是顶层const,靠左的是底层const
const int &r=ci; //用于声明的const都是底层const
int i=0;
int *const p1=&i; //不能改变p1的值,这是一个顶层const
const int ci=42; //不能改变ci的值,这是一个顶层const
const int *p2=&ci; //允许改变p2的值,这是一个底层const
const int *const p3=p2; //靠右const是顶层const,靠左的是底层const
const int &r=ci; //用于声明的const都是底层const
2016-08-02