1)内联函数在运行时可调试,而宏不可以
2)内联函数可以访问类的成员变量,而宏不可以
3)在类中声明同时定义的简单的函数,会自动转换为内联函数
4)编译器会对内联函数的参数类型做安全检查
:内联函数具有宏的替换效果,以及普通函数的安全检查
#define max(a,b) ((a) > (b) ?(a) :(b)) //一定要带括号,优先级不同会造成意想不到的结果
int a=1,b=0;
max(a++,b); -> {a++ > b ? a++ : b} ->
等价:
if(a++ > b)
return a++;
else
return b;
最后:
max=2;
a=3;
max(a++,b+10); -> {a++ > b+10 ? a++ : b+10} ->
等价:
if(a++ > b+10)
return a++;
else
return b+10;
最后:
b的值一直不变,最后加10等于10;
max(a,"hello&
2)内联函数可以访问类的成员变量,而宏不可以
3)在类中声明同时定义的简单的函数,会自动转换为内联函数
4)编译器会对内联函数的参数类型做安全检查
:内联函数具有宏的替换效果,以及普通函数的安全检查
#define max(a,b) ((a) > (b) ?(a) :(b)) //一定要带括号,优先级不同会造成意想不到的结果
int a=1,b=0;
max(a++,b); -> {a++ > b ? a++ : b} ->
等价:
if(a++ > b)
return a++;
else
return b;
最后:
max=2;
a=3;
max(a++,b+10); -> {a++ > b+10 ? a++ : b+10} ->
等价:
if(a++ > b+10)
return a++;
else
return b+10;
最后:
b的值一直不变,最后加10等于10;
max(a,"hello&