如何解决在 MSVC C++ 中强制内联 lambda
接下来的代码在 CLang/GCC 中编译,并成功内联 lambda:
#include <iostream>
int main() {
int x = 0;
auto f = [&]() __attribute__((always_inline)) {
++x;
};
f();
std::cout << x;
}
但在最新的 MSVC (2019 v16.8.3) 中带有 __forceinline
的类似代码无法编译,尽管已宣布 as implemented in v16.7:
#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% 的用例中都保证 lambda 绝对是内联的?
解决方法
根据功能请求中的 Jonathan Caves reply,未来支持的语法是
auto f = [&]() [[msvc::forceinline]] {
++x;
};
看起来他们希望它符合 C++11 中引入的 attributes syntax
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。