inline与if解决办法
inline与if
一直听说,inline函数里不应当有循环和选择,因为编译器会傻掉。
实际上好像可以,连warning都没给?
这是因为现代编译器(gcc 4.6.3)已经聪明了,或者它悄悄把我的inline函数换成普通的了?
------解决方案--------------------
“编译器会傻掉”这句话不知道是那个白痴传出来的
不管你inline函数里干了什么,编译器做的事情就是判断这个inline中是否有耗时操作或者有难以内联的逻辑(比如跨函数跳转之类),如果觉得不适合内联,就不内联,inline本身只是个建议选项
如果你用VC,用/Wall就能够让编译器把“标记了内联却认为不应该内联的”和“没有标记内联却可以内联(比如只调用一次的非导出函数)”的函数都给出警告,gcc不知道有没有
实际上VC和gcc都有更智能的选项,久之完全不管用户是否指定,而是编译器判断函数是否内联,编译器是能做到的,其实inline和register之一类关键字都没什么用,既然不是强制的,决定权在编译器,那你让我写干嘛,你自己判断不就结了
------解决方案--------------------
是否inline编译器决定。
------解决方案--------------------
------解决方案--------------------
以前都是编译阶段,现在连接阶段也可以了,用LTCG
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
inline只是指导,而非强制吧
------解决方案--------------------
------解决方案--------------------
inline 只是建议
force inline 也只是 强烈建议
一直听说,inline函数里不应当有循环和选择,因为编译器会傻掉。
实际上好像可以,连warning都没给?
这是因为现代编译器(gcc 4.6.3)已经聪明了,或者它悄悄把我的inline函数换成普通的了?
------解决方案--------------------
“编译器会傻掉”这句话不知道是那个白痴传出来的
不管你inline函数里干了什么,编译器做的事情就是判断这个inline中是否有耗时操作或者有难以内联的逻辑(比如跨函数跳转之类),如果觉得不适合内联,就不内联,inline本身只是个建议选项
如果你用VC,用/Wall就能够让编译器把“标记了内联却认为不应该内联的”和“没有标记内联却可以内联(比如只调用一次的非导出函数)”的函数都给出警告,gcc不知道有没有
实际上VC和gcc都有更智能的选项,久之完全不管用户是否指定,而是编译器判断函数是否内联,编译器是能做到的,其实inline和register之一类关键字都没什么用,既然不是强制的,决定权在编译器,那你让我写干嘛,你自己判断不就结了
------解决方案--------------------
是否inline编译器决定。
------解决方案--------------------
------解决方案--------------------
以前都是编译阶段,现在连接阶段也可以了,用LTCG
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
inline只是指导,而非强制吧
------解决方案--------------------
------解决方案--------------------
inline 只是建议
force inline 也只是 强烈建议