gpt4 book ai didi

c++ - 什么时候 lambda 微不足道?

转载 作者:IT老高 更新时间:2023-10-28 12:37:24 26 4
gpt4 key购买 nike

什么时候 lambda a 可以保证是微不足道的,如果有的话?

我假设如果它只捕获普通类型或什么都不捕获,那将是微不足道的。不过,我没有任何标准语言来支持这一点。

我的动机是将一些代码从 Visual C++ 12 移到 14 并发现一些静态断言在处理我认为微不足道的 lambda 时失败。

例子:

#include <type_traits>
#include <iostream>
using namespace std;

int main()
{
auto lambda = [](){};

cout << boolalpha << is_trivially_copyable<decltype(lambda)>{} << endl;
}

这会在 vs140 上产生 false 而在 vs120 和 clang 中产生 true。由于周围没有 gcc >= 5,我无法测试 gcc。我希望这是 vs140 的回归,但我不确定这里的行为是否正确。

最佳答案

标准没有指定闭包类型(lambda 表达式的类型)是否是平凡的。它明确地将其留给实现,这使其不可移植。恐怕你不能依赖你的 static_assert 产生任何一致的东西。

引用 C++14 (N4140) 5.1.2/3:

... An implementation may define the closure type differently from what is described below provided this does not alter the observable behavior of the program other than by changing:

  • the size and/or alignment of the closure type,
  • whether the closure type is trivially copyable (Clause 9),
  • whether the closure type is a standard-layout class (Clause 9), or
  • whether the closure type is a POD class (Clause 9).

...

(强调我的)

解析那句话中的双重否定后,我们可以看到允许实现来决定闭包类型是普通可复制、标准布局还是POD。

请注意,相同的措辞也出现在 C++17 (N4659) [expr.prim.lambda.closure] 8.1.5.1/2 中。

关于c++ - 什么时候 lambda 微不足道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32986193/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com