gpt4 book ai didi

c++ - 如何构造带有嵌入值的 std::string ,即 "string interpolation"?

转载 作者:IT老高 更新时间:2023-10-28 13:00:37 25 4
gpt4 key购买 nike

我想创建一个带有嵌入信息的字符串。实现我想要的一种方法(不是唯一方法)称为 string interpolation或变量替换,其中将字符串中的占位符替换为实际值。

在 C 语言中,我会这样做:

printf("error! value was %d but I expected %d",actualValue,expectedValue)

如果我在 python 中编程,我会做这样的事情:

"error! value was {0} but I expected {1}".format(actualValue,expectedValue)

这两个都是字符串插值的例子。

如何在 C++ 中做到这一点?

重要警告:

  1. 我知道如果我想将这样的消息打印到标准输出(不是字符串插值,而是打印出我想要的那种字符串),我可以使用 std::cout:
cout << "error! value was " << actualValue << " but I expected "
<< expectedValue;

我不想打印一个字符串到标准输出。我想将 std::string 作为参数传递给函数(例如异常对象的构造函数)。

  1. 我使用的是 C++11,但可移植性可能是一个问题,因此了解哪些方法在 C++ 的哪些版本中有效和无效将是一个加分项。

编辑

  1. 就我的直接使用而言,我并不关心性能(我提出了一个异常(exception),因为我要大声哭泣!)。 然而,了解各种方法的相对性能通常会非常有用。

  2. 为什么不直接使用 printf 本身(毕竟 C++ 是 C 的超集...)? This answer讨论了一些为什么不这样做的原因。据我所知,类型安全是一个重要原因:如果你放 %d,那么你放在那里的变量最好能真正转换为整数,因为这就是函数如何确定它是什么类型的。如果有一种方法在编译时了解要插入的变量的实际类型,那会更安全。

最佳答案

在 C++20 中,您将能够使用 std::format .

这将支持 python 样式格式:

string s = std::format("{1} to {0}", "a", "b");

已经有一个可用的实现:https://github.com/fmtlib/fmt .

关于c++ - 如何构造带有嵌入值的 std::string ,即 "string interpolation"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37956090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com