c++ - 通用 lambdas 和二进制大小/代码膨胀
问题描述
当我们比较这段代码时,生成的二进制文件有什么区别:
struct S {
template<typename... Args>
void operator()(Args... args) { /* ... */ }
};
// And then inside some block:
S s;
s(42);
s(3.14, "Hi!");
s("Hi!", 3.14);
...到此代码:
const auto l = [](auto... args) { /* ... */ };
// And then inside some block:
l(42);
l(3.14, "Hi!");
l("Hi!", 3.14);
据我了解,struct
代码创建了 3 个模板实例化operator()
,所有这些实例化都在二进制文件中显示为符号。拉姆达呢?编译器创建一个类似于s
. 但是如果它是一个未命名的类类型,它会在二进制文件中创建符号吗?
动机:我使用了一个模板繁重的库,我必须在其中启用/bigobj。我想避免这种情况,我想知道 lambdas 是否可以帮助防止模板代码膨胀。这是在标准中定义的,还是依赖于编译器实现?
解决方案
推荐阅读
- php - 使用 apache_request_headers()
- scala - Spark cassandra 连接器 - 在 where 条件下访问 RDD
- angular - 找不到工作区文件('angular.json')
- angular - 使用 ng-if 隐藏某个元素
- html - 将 HTML 文件导入 React 的组件
- python - Python 循环比 Pandas 快
- javascript - 动态填充一个 Promise.all()
- java - 线程的易失性
- visual-studio - 如何撤消 Visual Studio 更新
- python - 如何在python中使用selenium webdriver从excel导入数据