"std::string + char"表达式会创建另一个 std::string 吗?
Does "std::string + char" expression create another std::string?
下面的表达式是否创建另一个std :: string,然后将其添加到S1?
std::string s1 = "abc", s2 = "xyz";
s1 += s2 + 'b';
是否应该防止这种情况(在没有其他工作的情况下将它们添加到S1)?
std::string s1 = "abc", s2 = "xyz";
s1 += s2;
s1 += 'b';
这些规则是否适用于" std :: string std :: string"表达式?
涉及std::string
的所有重载+
操作员返回新的std::string
对象。这是当您最终破译相关文档时,您将得出不可避免的结论。
因此,在您的问题中的第一个示例中,+
操作员将返回一个临时对象,该对象将在立即关注+=
操作完成后被销毁。
说:允许C 编译器采用任何相同可观察结果的优化。C 编译器可能会发现,可以通过将代码的第一个版本转换为第二个版本,从本质上讲,有可能避免创建临时对象的需要。我认为这不太可能,但这是可能的。代码的两个版本之间的结果没有明显的差异,因此优化是公平的游戏。
但是,从技术上讲,+
操作产生临时std::string
对象。
取决于上下文。在您的代码段中,不会有另一个对象,s2
和'b'
将附加到已经存在的s1
。
http://www.cplusplus.com/reference/string/string/string/operator =/
例如,在这种情况下:
std::string s1 = "abc";
std::string s2 = "zxy";
std::string result = s1 + s2;
result
是新对象condentent s1
和s2
相关文章:
- cppcheck在const std::string[]上引发警告
- 将std::string传递给WriteConsole API
- 为std::string的某个索引赋值
- std中有类似find_last_of的函数,而string中没有
- 使用 std::string () const 函数启动线程或未来
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 如何更改大小(std::string)
- std::string 的对象真的可以移动吗?
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 无法从 std::string 中提取C++ Unicode 符号
- std::string 构造函数如何处理固定大小的 char[]?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- C++:考虑C++ std::string 中双引号 (") 的字面含义,而不使用反斜杠 (\)
- 'int main(int, int, std::__cxx11::string, std::__cxx11::string)'只需要零或两个参数 [-Wmain]
- C++ 在列表和列表之间选择返回类型<<string>std::p air<string,string>>
- std::string, std::wstring and UTF8
- uan inplace replacement of std::string/std::wstring?
- #define Glib::string std:wstring
- 从 std::string & std::wstring 中获取 char 整数值
- BSTR转换为std::string(std::wstring),反之亦然