| .. title:: clang-tidy - performance-inefficient-string-concatenation |
| |
| performance-inefficient-string-concatenation |
| ============================================ |
| |
| This check warns about the performance overhead arising from concatenating |
| strings using the ``operator+``, for instance: |
| |
| .. code-block:: c++ |
| |
| std::string a("Foo"), b("Bar"); |
| a = a + b; |
| |
| Instead of this structure you should use ``operator+=`` or ``std::string``'s |
| (``std::basic_string``) class member function ``append()``. For instance: |
| |
| .. code-block:: c++ |
| |
| std::string a("Foo"), b("Baz"); |
| for (int i = 0; i < 20000; ++i) { |
| a = a + "Bar" + b; |
| } |
| |
| Could be rewritten in a greatly more efficient way like: |
| |
| .. code-block:: c++ |
| |
| std::string a("Foo"), b("Baz"); |
| for (int i = 0; i < 20000; ++i) { |
| a.append("Bar").append(b); |
| } |
| |
| And this can be rewritten too: |
| |
| .. code-block:: c++ |
| |
| void f(const std::string&) {} |
| std::string a("Foo"), b("Baz"); |
| void g() { |
| f(a + "Bar" + b); |
| } |
| |
| In a slightly more efficient way like: |
| |
| .. code-block:: c++ |
| |
| void f(const std::string&) {} |
| std::string a("Foo"), b("Baz"); |
| void g() { |
| f(std::string(a).append("Bar").append(b)); |
| } |
| |
| Options |
| ------- |
| |
| .. option:: StrictMode |
| |
| When zero, the check will only check the string usage in ``while``, ``for`` |
| and ``for-range`` statements. Default is `0`. |