让我们考虑这段代码片段,并假设a、b、c和d都是非空字符串。
std::string a, b, c, d;
d = a + b + c;
计算这3个
std::string
实例的总和时,标准库实现会创建第一个临时std::string
对象,将a
和b
的缓冲区连接起来复制到其内部缓冲区中,然后在临时字符串和c
之间执行相同的操作。一位程序员强调,与其这种行为不同,可以定义
operator+(std::string, std::string)
返回一个std::string_helper
。该对象的作用就是将实际的连接延迟到它被转换为std::string
的时刻。显然,operator+(std::string_helper, std::string)
也应该被定义为返回相同的helper,它将“记住”它有一个额外的连接要执行。这样的行为可以节省创建n-1个临时对象、分配它们的缓冲区、复制它们等CPU成本。所以我的问题是:为什么它不已经像这样工作?我想不出任何缺点或限制。
std::string
的隐式转换的现有代码。 - Mike Seymour