我看过一些基本上可以做到这一点的代码:
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,
};
这些都是其中一个吗?
答案 0 :(得分:0)
在静态时间使用初始值初始化结构(例如在第二个示例中)非常适合琐碎的值,但是,如果您需要运行非琐碎的初始化(并且没有构造函数),那么lambda方法是可行的。例如,如果您需要使用返回带有“ out”参数的数据的函数来初始化字段,该怎么办?
在存在lambda之前,您必须创建一个显式的初始化函数,并使用它来初始化变量(当然,这就是CTOR是什么),但是现在lambda使此过程更为简洁。
答案 1 :(得分:0)
初始化结构要比仅将成员设置为编译时常量复杂得多。也许您正在从文件中读取内容或获取GPU资源的句柄。我个人更喜欢编写一个初始化对象的函数,因为函数具有描述性名称并且可以重用。我从未使用过这种lambda模式。对于您显示的示例,初始化default_A
的最佳方法是:
static A default_a = {1, 2};
指定的初始化程序是C ++ 20的功能。
答案 2 :(得分:0)
在我看来,它像一个重构工件。过去用于执行某些操作的代码需要更复杂的初始化代码。该代码在某个时候已被删除,但lambda仍然存在。