inline与if解决办法

inline与if
一直听说,inline函数里不应当有循环和选择,因为编译器会傻掉。
实际上好像可以,连warning都没给?
这是因为现代编译器(gcc 4.6.3)已经聪明了,或者它悄悄把我的inline函数换成普通的了?

------解决方案--------------------
“编译器会傻掉”这句话不知道是那个白痴传出来的

不管你inline函数里干了什么,编译器做的事情就是判断这个inline中是否有耗时操作或者有难以内联的逻辑(比如跨函数跳转之类),如果觉得不适合内联,就不内联,inline本身只是个建议选项

如果你用VC,用/Wall就能够让编译器把“标记了内联却认为不应该内联的”和“没有标记内联却可以内联(比如只调用一次的非导出函数)”的函数都给出警告,gcc不知道有没有

实际上VC和gcc都有更智能的选项,久之完全不管用户是否指定,而是编译器判断函数是否内联,编译器是能做到的,其实inline和register之一类关键字都没什么用,既然不是强制的,决定权在编译器,那你让我写干嘛,你自己判断不就结了
------解决方案--------------------
是否inline编译器决定。

------解决方案--------------------
探讨
引用:

“编译器会傻掉”这句话不知道是那个白痴传出来的

不管你inline函数里干了什么,编译器做的事情就是判断这个inline中是否有耗时操作或者有难以内联的逻辑(比如跨函数跳转之类),如果觉得不适合内联,就不内联,inline本身只是个建议选项

如果你用VC,用/Wall就能够让编译器把“标记了内联却认为不应该内联的”和“没有标记内联却可以内联(比如只调用一次……

------解决方案--------------------
以前都是编译阶段,现在连接阶段也可以了,用LTCG
------解决方案--------------------
探讨
引用:

谁说的?写在头文件的函数相当于默认加了inline,也就是编译器将其内联的可能性更高、条件更低

只要手动声明了inline,函数体写哪里无所谓

觉得你目前得到的说法处处谬误,如果是教材里说的就换掉教材,如果是别人说的那以后别听他的

函数的内联是编译阶段还是链接阶段?

------解决方案--------------------
探讨
即便不加LTCG,编译器仍可以在看到inline的时候就去搜索他的实现,完成内联

------解决方案--------------------
inline只是指导,而非强制吧
------解决方案--------------------
探讨
引用:

引用:
即便不加LTCG,编译器仍可以在看到inline的时候就去搜索他的实现,完成内联

这个得编译判断允许内联才行
或者force inline的情形,链接时也不会特意去内联的(M$内部函数除外)

所以一般都为编译阶段,链接时需要编译器+PGO+GL同时匹配才可以,不清楚VC的GL为啥必须采用PGO才能完成这个行为(或者PGO必须需要……

------解决方案--------------------
inline 只是建议
force inline 也只是 强烈建议