相关疑难解决方法(0)

C++中的"字符串插值":构造一个带有嵌入值的std :: string(例如,用于错误消息)?

我想创建一个包含嵌入信息的字符串.实现我想要的一种方式(不是唯一的方法)称为字符串插值或变量替换,其中字符串中的占位符用实际值替换.

在C中,我会做这样的事情:

printf("error! value was %d but I expected %d",actualValue,expectedValue)
Run Code Online (Sandbox Code Playgroud)

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

"error! value was {0} but I expected {1}".format(actualValue,expectedValue)
Run Code Online (Sandbox Code Playgroud)

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

我怎么能用C++做到这一点?

重要提示:

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

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

  1. 我正在使用C++ 11,但可移植性可能是一个问题,所以知道哪些方法有效,哪些方法不适用于哪个版本的C++.

编辑

  1. 对于我的直接使用,我并不关心性能(我正在大声提出异常!). 但是,了解各种方法的相对性能通常非常有用.

  2. 为什么不直接使用printf(毕竟C++是C的超集......)? 这个答案讨论了一些原因.根据我的理解,类型安全是一个重要原因:如果你把%d放在那里,你放在那里的变量最好真的可以转换为整数,因为这就是函数如何计算它是什么类型.使用一种方法可以更加安全,该方法使用要插入的变量的实际类型的编译时知识.

c++ c++11

24
推荐指数
4
解决办法
2万
查看次数

标签 统计

c++ ×1

c++11 ×1