[libcxx-commits] [PATCH] D123058: [libc++] Add capacity constructor to string

Louis Dionne via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Mon Apr 4 12:23:58 PDT 2022


ldionne added inline comments.


================
Comment at: libcxx/include/string:4185-4188
+    _String __r(__capacity_tag(),
+                __lhs_sz + __rhs_sz,
+                _String::__alloc_traits::select_on_container_copy_construction(__lhs.get_allocator()));
+    __r.append(__lhs.data(), __lhs_sz);
----------------
IMO this makes a lot more sense. However, I'm going to push the reasoning further and ask this: Would this *also* be equivalent?

```
using _String = basic_string<_CharT, _Traits, _Allocator>;
typename _String::size_type __lhs_sz = __lhs.size();
typename _String::size_type __rhs_sz = __rhs.size();
_String __r(_String::__alloc_traits::select_on_container_copy_construction(__lhs.get_allocator()));
__r.reserve(__lhs_sz + __rhs_sz);
__r.append(__lhs.data(), __lhs_sz);
__r.append(__rhs.data(), __rhs_sz);
return __r;
```

If so, then perhaps we don't really need the constructor after all?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D123058/new/

https://reviews.llvm.org/D123058



More information about the libcxx-commits mailing list