为什么包含循环或者switch的函数不适合内联解决办法
为什么包含循环或者switch的函数不适合内联
谷歌编程规范上有一条:内联那些包含循环或switch语句的函数是得不偿失的,除非在大多数情况下,这些循环或switch语句从不执行
怎么解释?
------解决方案--------------------
引入内联的目的是消除函数调用时的时间开销,它通常用于频繁执行的很短(一般只有1~5行)的函数.如果函数中有循环或递归,用于调用的时间就可忽略不计,失去了内联存在的意义.如果仍坚持用内联,不仅使主调函数变得臃肿,一般还会使模块间不必要的耦合增多,不利于代码的维护
------解决方案--------------------
内联函数在调用的时候,是把整个函数嵌入到相应调用的地方,如果有循环等,那么每进行一次循环,就能贴一次代码,那将会有很大的开销,所以这时候不应该用在循环里。
------解决方案--------------------
内联函数本身的要求就是不应该有嵌套,要不然尽管你写的是内联,系统也不会帮你实现的
其实内联函数的实现就是添加块
比如
inline int a(int b)
{...}
其实这个函数在系统内就是
{
int b;
.......
}
switch的话貌似没听说过有限制,最好还是别用吧
------解决方案--------------------
得不偿失? 应该说没什么好处.
至于失败,没看出多少来,除了内联 本身的缺点
谷歌编程规范上有一条:内联那些包含循环或switch语句的函数是得不偿失的,除非在大多数情况下,这些循环或switch语句从不执行
怎么解释?
------解决方案--------------------
引入内联的目的是消除函数调用时的时间开销,它通常用于频繁执行的很短(一般只有1~5行)的函数.如果函数中有循环或递归,用于调用的时间就可忽略不计,失去了内联存在的意义.如果仍坚持用内联,不仅使主调函数变得臃肿,一般还会使模块间不必要的耦合增多,不利于代码的维护
------解决方案--------------------
内联函数在调用的时候,是把整个函数嵌入到相应调用的地方,如果有循环等,那么每进行一次循环,就能贴一次代码,那将会有很大的开销,所以这时候不应该用在循环里。
------解决方案--------------------
内联函数本身的要求就是不应该有嵌套,要不然尽管你写的是内联,系统也不会帮你实现的
其实内联函数的实现就是添加块
比如
inline int a(int b)
{...}
其实这个函数在系统内就是
{
int b;
.......
}
switch的话貌似没听说过有限制,最好还是别用吧
------解决方案--------------------
得不偿失? 应该说没什么好处.
至于失败,没看出多少来,除了内联 本身的缺点