C++11 中增加了 std::initializer_list 类型,用于在函数中表示一组相同类型的值。然而,当我们使用 initializer_list 进行字符串拼接时,需要在运行时进行拼接,这会降低代码的效率。因此,我们需要一种方法,在编译时连接 initializer_list,以提高代码的效率。
C++17 中,新增了对操纵符的支持,我们可以使用此来达到在编译时连接 initializer_list 的目的。以下是示例代码:
#include
#include
template
auto operator<<(std::basic_ostream& os, const std::initializer_list& il) ->
std::basic_ostream& {
for (auto str : il) {
while (*str) os.put(*str++);
}
return os;
}
int main() {
constexpr auto str = "Hello " "world" "!";
std::cout << str << std::endl;
return 0;
}
在上面的代码中,我们重载了 << 运算符,以支持 initializer_list 的编译时连接。通过将字符串常量使用空格分隔符连接起来,我们可以在编译时连接字符串。
在 main 函数中,我们将连接了的字符串打印到控制台。如果一切正常,输出应为:Hello world!
上一篇:编译时链接的库没有显示
下一篇:编译时链接一个Metal库的问题