Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
static _GLIBCXX_CONSTEXPR bool
lt(const char_type& __c1, const char_type& __c2)
{ return __c1 < __c2; }
operator<(const X&).Заполняющий конструктор так вообще удивил — откуда-то взялись дополнительные копирования и деструкторы.Они взялись из-за передачи трассера по значению в подпрограммы. Что характерно, если бы тип НЕ был трассером, то компилятор все оптимизировал бы и заинлайнил, и никаких дополнительных копирований не происходило бы.
Неожиданно, результат для resize получился значительно хуже чем для reserveДля меня — ожидаемо.
деструкторы для символов не вызываются
-std=c++11 -Wall -W -pedantic -O2 -stdlib=libc++
$ clang++ -std=c++11 -Wall -W -pedantic -O2 -stdlib=libc++ ./test.cpp
/usr/include/c++/v1/string:1134:31: error: attempt to use a deleted function
_LIBCPP_INLINE_VISIBILITY basic_string()
...
fatal error: too many errors emitted, stopping now
error C2621: member 'std::_String_val<_Val_types>::_Bxty::_Buf' of union 'std::_String_val<_Val_types>::_Bxty' has copy constructor
with
[
_Val_types=std::_Simple_types<tracer::X>
]
Несколько подробностей об std::string