【发布时间】:2020-12-30 15:44:37
【问题描述】:
接下来的代码在 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?
如果在某些地方使用了给定的 lambda 而没有被内联,那么在所有流行的编译器(例如 CLang/GCC/MSVC)中是否有任何方法不编译代码(并引发编译错误)? __attribute__((always_inline)) 和 __forceinline 在所有 100% 的用例中是否也保证 lambda 肯定是内联的?
【问题讨论】:
标签: c++ visual-c++ lambda visual-studio-2019 inline