个人项目的话是应该的,许多特性用起来挺爽的。
举个典型例子:调用一些库,需要传递一个 buffer 进去接收字符串并保存到 std::string 的情景。
以前经常看到这种写法:
auto len = get_string_length();
char* buffer = new char[len];
get_string(buffer);
std::string result(buffer, len);
delete[] buffer;
return result;
但是从 C++ 17 开始,可以这么写:
auto len = get_string_length();
std::string result;
result.resize(len);
get_string(result.data());
return result;
后者与前者相比:代码更加简洁,少了一次拷贝,不需要手动释放内存,在遇到异常时不会导致内存泄漏。
另外按照 Stack Overflow 上的说法,自 C++11 开始就能用这种方法了,要把 string.data() 换成 &string[0]
https://stackoverflow.com/questions/1042940/writing-directly-to-stdstring-internal-buffers