odi*_*erd 5 lambda gcc inline c++11
我将 GCC 4.6 用作 Cortex 嵌入式处理器的 lpcxpresso ide 的一部分。我的代码大小非常有限,尤其是在调试模式下编译时。到目前为止,使用属性((always_inline)) 已被证明是内联琐碎函数的好工具,这在调试模式下节省了大量代码膨胀,同时仍保持可读性。我希望它在未来成为主流并得到支持,因为这里提到了http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0348c/CIAJGAIH.html
现在我的问题:这是声明 Lambda 始终内联的正确语法吗?
#define ALWAYS_INLINE __attribute__((always_inline))
[](volatile int &i)ALWAYS_INLINE{i++;}
Run Code Online (Sandbox Code Playgroud)
它确实有效,我的问题是它将来是否会继续有效,我可以做些什么来确保它在未来有效。如果我切换到另一个支持 c++11 的主要编译器,我会找到一个类似的关键字来替换属性((always_inline)) 吗?如果我遇到我的仙女教母,我希望有一个编译器指令,它会导致所有被构造为具有空构造函数的临时变量并通过引用绑定的 lambda 表达式即使在调试模式下也能自动内联。有任何想法吗?
未来还会继续发挥作用吗?
但很可能always_inline是特定于编译器的,并且由于没有标准指定 lambda 的确切行为,因此无法保证这在将来会继续有效。
我可以做什么来确保它有效?
这取决于编译器而不是你。如果未来版本放弃对always_inlinelambda 的支持,您必须坚持使用可用的版本或编写自己的预处理器,以使用always_inline-like 关键字内联 lambda。
如果我切换到另一个支持 c++11 的主要编译器,我会找到类似的关键字吗?
有可能,但同样,没有任何保证。唯一真正的标准是 C++inline关键字,它不适用于 lambda。对于非 lambda,它仅建议内联并告诉编译器可以在不同的编译单元中定义函数。
| 归档时间: |
|
| 查看次数: |
2576 次 |
| 最近记录: |