C++ 如何将“连接起来”;常量字符串“;查斯呢?

C++ 如何将“连接起来”;常量字符串“;查斯呢?,c++,string,char,C++,String,Char,做以下事情的“正确方法”是什么?(注意,我不想将消息输出到屏幕上(但是),数据需要存储在变量中。) < C++中的“适当方式”是如何将字符串、字符、字符数组和其他可转换的数据串接成一个字符串?在C++中有什么类似的东西吗?< p>你试图做的事情不会起作用,因为C++把你的连接看作是添加几个 char < /代码>指针的尝试。如果将序列中的第一个元素显式强制转换为std::string,它应该可以工作 更改原始代码 string message = "Today's program was bro

做以下事情的“正确方法”是什么?(注意,我不想将消息输出到屏幕上(但是),数据需要存储在变量中。)


< C++中的“适当方式”是如何将字符串、字符、字符数组和其他可转换的数据串接成一个字符串?在C++中有什么类似的东西吗?

< p>你试图做的事情不会起作用,因为C++把你的连接看作是添加几个<代码> char < /代码>指针的尝试。如果将序列中的第一个元素显式强制转换为
std::string
,它应该可以工作

更改原始代码

string message = "Today's program was brought to you by the letter '" + input + "'.";
为此:

string message = std::string("Today's program was brought to you by the letter '")
    + input + "'.";

q、 v.它更详细地讨论了这个问题(尽管我不知道为什么它被认为不是一个真正的问题)。

有几种方法可以做到这一点,但在实现的简单性和方便性之间取得良好平衡的一种方法是使用一个“formatter”类,它包装了
std::stringstream
,如下所示:

string message = formatter() << "Today's program was brought to you by the letter '" << input << "'.";

string message=formatter()是的,Boost.Format有点像Python,有很多小型的、现代的、类型安全的格式库。但是正如我在问题中提到的,如果我将十几个项目的集合(例如,
“a:+a+”,b:+b+,c:+c+…
)这不会导致大量的
std::string
强制转换吗?您只需要从第一个元素构造
std::string
<代码>标准::字符串
+字符串文字是已定义的operation@DavidStone啊,是的,我明白了!第一个元素上的
+
操作返回另一个
std::string
,该操作已在其上定义,等等。事实上,在这种情况下,通过使用“伪”空字符串开始行,代码可以更简单:
std::string()+“今天的程序…”+input
@IQAndreas是一个非常好的答案。这里的一个重要好处是,这种方法可以让您流式处理无法直接连接到
字符串的数字和其他类型<代码>运算符std::string()
可以设置为
const
。不管它值多少-
static_cast(std::ostringstream()
string message = std::string("Today's program was brought to you by the letter '")
    + input + "'.";
string message = formatter() << "Today's program was brought to you by the letter '" << input << "'.";
#include <sstream>

class formatter {
public:
    template <typename T>
    formatter & operator<<(const T & o) {
        stream_ << o;
        return *this;
    }

    const std::string str() const { return stream_.str(); }

    operator std::string() {
            return stream_.str();
    }

private:
    std::ostringstream stream_;
};