今天,当我试图将一个std::string和一个int连接起来时,我感到很惊讶。考虑以下MWE:
#include <iostream>
#include <string>
void print(const std::string& text)
{
std::cout << "The string is: " << text << ".\n";
}
int main()
{
print("iteration_" + 1);
return 0;
}而不是印刷
The string is: iteration_1.我希望它能打印出来
The string is: teration_.背景到底是怎么回事?由于某种原因,字符串是否被转换为char[]或类似的东西?operator+文档没有列出任何带有std::string和int的列表。
用数字连接std::string的正确方法是什么?我真的要把它们都扔进std::stringstream,还是用std::to_string()把数字转换成std::string?
发布于 2020-05-06 09:41:42
由于某种原因,字符串是否转换为char[]?
事实上,情况正好相反。"iteration_"是一个char[11],当您添加1时,它会衰减为const char*。将指针递增一个使其指向字符串中的下一个字符。然后,这将用于构造一个临时std::string,其中包含除第一个字符之外的所有字符。
您所链接的文档用于operator+ of std::string,但要使用该文档,您首先需要一个std::string。
发布于 2020-05-06 09:41:32
这一行是问题所在:
print("iteration_" + 1);字符串文本正在退化为char*。将1添加到此char*中,将其移动到下一个字符。
如果您想将字符串"1"添加到文本的末尾,一个非常简单的方法是将字符串文本传递给std::string构造函数,并手动将1转换为字符串。例如:
print(std::string("iteration_") + std::to_string(1));发布于 2020-05-06 09:43:26
如果您尝试使用以下内容:
std::string str = "iteration" + 1;编译器将抛出警告:
警告:将'int‘添加到字符串中并不会附加到字符串-Wstring-plus-int。
这是因为您正在将指向“迭代”字符串的指针递增1,这意味着现在"teration“字符串被分配给str变量。
连接的适当方式是:
std::string str = "iteration" + std::to_string(1);https://stackoverflow.com/questions/61631956
复制相似问题