为什么定义一个lambda函数返回一个结构而不是直接定义该结构?

时间:2019-04-28 00:27:23

标签: c++ lambda

我看过一些基本上可以做到这一点的代码:

struct A {
  int a;
  int b;
};

static A default_a = []() {
  A ret;
  ret.a = 1;
  ret.b = 2;
  return ret;
}();

为什么这样写?我会写:

static A default_a {
  .a = 1,
  .b = 2,
};

这些都是其中一个吗?

3 个答案:

答案 0 :(得分:0)

在静态时间使用初始值初始化结构(例如在第二个示例中)非常适合琐碎的值,但是,如果您需要运行非琐碎的初始化(并且没有构造函数),那么lambda方法是可行的。例如,如果您需要使用返回带有“ out”参数的数据的函数来初始化字段,该怎么办?

在存在lambda之前,您必须创建一个显式的初始化函数,并使用它来初始化变量(当然,这就是CTOR是什么),但是现在lambda使此过程更为简洁。

答案 1 :(得分:0)

初始化结构要比仅将成员设置为编译时常量复杂得多。也许您正在从文件中读取内容或获取GPU资源的句柄。我个人更喜欢编写一个初始化对象的函数,因为函数具有描述性名称并且可以重用。我从未使用过这种lambda模式。对于您显示的示例,初始化default_A的最佳方法是:

static A default_a = {1, 2};

指定的初始化程序是C ++ 20的功能。

答案 2 :(得分:0)

在我看来,它像一个重构工件。过去用于执行某些操作的代码需要更复杂的初始化代码。该代码在某个时候已被删除,但lambda仍然存在。