GCC uuu属性uuu((始终_内联))和lambdas,这种语法正确吗?

GCC uuu属性uuu((始终_内联))和lambdas,这种语法正确吗?,gcc,c++11,lambda,inline,Gcc,C++11,Lambda,Inline,我使用GCC4.6作为Cortex嵌入式处理器lpcxpresso ide的一部分。我的代码大小非常有限,尤其是在调试模式下编译时。到目前为止,使用属性((始终是内联的))已被证明是内联普通函数的好工具,这在调试模式下节省了大量代码膨胀,同时仍保持可读性。我希望它将来会成为主流并得到支持,因为这里提到了它 现在我的问题是:这是声明Lambda始终内联的正确语法吗 #define ALWAYS_INLINE __attribute__((always_inline)) [](volatile in

我使用GCC4.6作为Cortex嵌入式处理器lpcxpresso ide的一部分。我的代码大小非常有限,尤其是在调试模式下编译时。到目前为止,使用属性((始终是内联的))已被证明是内联普通函数的好工具,这在调试模式下节省了大量代码膨胀,同时仍保持可读性。我希望它将来会成为主流并得到支持,因为这里提到了它

现在我的问题是:这是声明Lambda始终内联的正确语法吗

#define ALWAYS_INLINE __attribute__((always_inline))
[](volatile int &i)ALWAYS_INLINE{i++;}
它确实有效,我的问题是它将来会继续有效吗?我能做些什么来确保它在将来有效。如果我切换到另一个支持c++11的主要编译器,我会找到一个类似的关键字来替换属性((总是内联的))吗? 如果我遇到我的仙女教母,我希望有一个编译器指令,它能使所有lambda(被构造为带有空构造函数的临时变量,并通过引用绑定)即使在调试模式下也能自动内联。有什么想法吗

它将来还会继续工作吗

很可能,但是,
always\u inline
是特定于编译器的,并且由于没有标准指定其在lambda中的确切行为,因此无法保证这将在将来继续工作

我能做些什么来确保它工作

这取决于编译器,而不是您。如果将来的版本放弃了对lambda的
始终内嵌
支持,那么您必须坚持使用一个可以工作的版本,或者使用
始终内嵌
-类关键字编写自己的预处理器

如果我切换到另一个支持c++11的主要编译器,我会吗 找到一个相似的关键字


很可能,但同样,没有担保。唯一的真正标准是C++ <代码>内联关键字,它不适用于lambdas。对于非lambda,它只建议内联并告诉编译器可以在不同的编译单元中定义函数。

C++11语法将是
[[always_inline]]
。但是GCC似乎还没有使用兼容的语法。讨论C++11之前的GCC属性在C++11 lambda上的位置可能价值有限。因此,您的意思是,将来会有一种兼容的语法,可以移植。这意味着将来将代码移植到C++编译器X只需要我修改C++定义的内容。@ MsAlter在标准C++中没有这样的属性。这种功能的标准C++11语法中特定于GCC的属性是
[[gnu::always_inline]]
@Ruslan:这就是为什么我说语法是
[[always inline]]
。这是明确的假设。IIRC,GCC4.6也没有
[[gnu::always inline]]
语法。