SeqAn3搜索模块配置与性能分析
1. 配置子模块
1.1 聚合初始化与指定初始化器
在现代C++代码中,使用花括号 {} 而不是圆括号 () 来初始化变量已成趋势。自C++ 11起,成员初始化器和聚合初始化就已可用。而指定初始化器是C99/C++ 20的特性,在C++ 20之前,可以通过链式函数调用来模拟这种风格。
聚合类型(即没有用户提供的构造函数、虚函数或私有/受保护成员的类型)可以像有一个接受其数据成员值的构造函数一样进行初始化。这种方式便于构造此类类型的对象,避免编写大量构造函数的“样板代码”。然而,它也存在与具有多个相同类型参数的函数接口类似的问题,即可能会混淆参数顺序,并且只能从末尾省略成员变量。
为解决这些问题,C++ 20引入了指定初始化器,它允许通过名称显式设置某些成员的值,还可以省略任何成员。GCC8和GCC9已支持该特性,GCC7作为目标平台则无法使用。当然,也可以使用聚合初始化作为替代,或者通过提供设置各个数据成员并返回对象副本的成员函数,将它们链式调用以创建一个具有自定义值的表达式。
以下是一个简单示例:
// 假设存在一个结构体
struct Foo {
int a;
int b;
int c;
};
// 指定初始化器
Foo f1 = {.a = 1, .c = 3};
// 链式函数调用模拟
struct Bar {
Bar& setA(int val) { a = val; return *this; }
Ba
超级会员免费看
订阅专栏 解锁全文
47

被折叠的 条评论
为什么被折叠?



