c++中字符串插值的最简单语法

Simplest syntax for string interpolation in c++

我在 c# 或 JavaScript 中习惯了像这样的易于阅读的字符串插值语法,所以当我开始学习 c++ 时,我希望它具有类似的功能,但是在谷歌搜索时c++ 中的字符串插值我找不到类似的东西。

在 C# 中,字符串是这样插入的:

$"My variable has value {myVariable}"

在 JavaScript 中看起来像这样:

`My variable has value ${myVariable}`

在字符串文字的不同位置插入多个值是一个很常见的问题,我确信在 C++ 中有一些标准的方法可以做到这一点。我想知道在 C++ 中执行此操作的最简单方法是什么以及人们通常如何执行此操作。

一种可能的方法,特别是在嵌入式环境中,是利用 C 标准库:

#include <cstdio>

...
printf("My variable is %s\n", myVariable)
...

myVariable 必须是 char*。对于 C++ 字符串,应使用 myVariable.c_str()

从 c++20 开始,您可以使用 <format> header 来做这样的事情:

auto s = std::format("My variable has value {}", myVariable);

这与在 c# 或 JavaScript 中的完成方式非常相似。

FWIW,这是 sprintf 的 C++11 安全版本 returns std::string

template<typename... Args>
std::string Sprintf(const char *fmt, Args... args)
{
    const size_t n = snprintf(nullptr, 0, fmt, args...);
    std::vector<char> buf(n+1);
    snprintf(buf.data(), n+1, fmt, args...);
    return std::string(buf.data());
}

然后您可以这样做:

float var = 0.123f;
std::string str = Sprintf("My variable has value %0.4f\n", var);

如果您使用的是 C++20,我喜欢@cigien 的回答。