下一个代码在CLang / GCC中编译,并成功内联lambda:
#include <iostream>
int main() {
int x = 0;
auto f = [&]() __attribute__((always_inline)) {
++x;
};
f();
std::cout << x;
}
但是__forceinline
尽管已宣布在v16.7中实现,但最新MSVC(2019 v16.8.3)中的类似代码无法编译:
#include <iostream>
int main() {
int x = 0;
auto f = [&]() __forceinline {
++x;
};
f();
std::cout << x;
}
抛出编译错误0305.cpp(5): error C3260: 'type': skipping unexpected token(s) before lambda body
。
真的还没有实施,还是我__forceinline
在错误的地方使用?还有其他方法可以强制在MSVC中内联lambda吗?
在所有流行的编译器(例如CLang / GCC / MSVC)中,是否有某种方式可以不编译代码(并抛出编译错误),以防在某些地方使用给定的lambda而不进行内联?也确实__attribute__((always_inline))
和__forceinline
使用用例都100%保证拉姆达肯定是内联?
根据Jonathan Caves对功能请求的答复,未来支持的语法是
auto f = [&]() [[msvc::forceinline]] {
++x;
};
这确实编译
看起来他们希望它符合C ++ 11中引入的属性语法
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句