Size: a a a

2020 August 02

AB

Artöm Bakri Al-Sarmi... in pro.cxx
template template parameter гугли
источник

AD

Apache DOG™ in pro.cxx
Ничего себе вам уже хкт завезли
источник

DF

Dollar Føølish in pro.cxx
Году в 98
источник

AD

Apache DOG™ in pro.cxx
Трейты вроде не так давно завезли
источник

DF

Dollar Føølish in pro.cxx
Тайпклассов нет в с++
источник

DF

Dollar Føølish in pro.cxx
Если речь про растовские трейты
источник
2020 August 03

I

Ioann_V in pro.cxx
vector() noexcept(noexcept(Allocator()));
источник

I

Ioann_V in pro.cxx
Ребята, вот такой вот Конструктор по умолчанию должен быть у Вектора. То есть, noexcept spec - берется по Умолчательному Конструктору Аллокатора, так?
источник

I

Ioann_V in pro.cxx
Тогда, как быть, если в умолчательном конструкторе Вектора, я решаю зарезервировать N байт памяти? Ведь по такой логике, спецификатор noexcept должен браться не у Умолчательного конструктора, а у allocate функции :?
источник

I

Ioann_V in pro.cxx
Или, стандарт запрещает резервировать память в умолчательном конструкторе?
источник

CD

Constantine Drozdov in pro.cxx
Ioann_V
Или, стандарт запрещает резервировать память в умолчательном конструкторе?
Видимо, да, есть гарантия, что он не дернет аллокатор
источник

I

Ioann_V in pro.cxx
Constantine Drozdov
Видимо, да, есть гарантия, что он не дернет аллокатор
Я так понимаю, по итогу, не имея возможности заранее задавать буффер, мы получаем деградацию перфоманса, пусть и маленькую: когда начальный размер нуль, в push_back мы должны будем сделать проверку и выставить нужный размер - если нуль, то скажем, 4 элемента, а если не нуль, то умножим на два, как и делает gcc...Но это лишняя инструкция, в лучшем случае - cmove, если мы про x86, в худшем - ветка, наверное. Или такой гарантии нету и все же мы можем дёрнуть аллокатор в конструкторе вектора, при этом как то порешав проблемы с noexcept spec?(которая по утверждению cppref берется с Умолчательного ctor allocator, а не у функции allocate!!!)
источник

CD

Constantine Drozdov in pro.cxx
Ioann_V
Я так понимаю, по итогу, не имея возможности заранее задавать буффер, мы получаем деградацию перфоманса, пусть и маленькую: когда начальный размер нуль, в push_back мы должны будем сделать проверку и выставить нужный размер - если нуль, то скажем, 4 элемента, а если не нуль, то умножим на два, как и делает gcc...Но это лишняя инструкция, в лучшем случае - cmove, если мы про x86, в худшем - ветка, наверное. Или такой гарантии нету и все же мы можем дёрнуть аллокатор в конструкторе вектора, при этом как то порешав проблемы с noexcept spec?(которая по утверждению cppref берется с Умолчательного ctor allocator, а не у функции allocate!!!)
Как я понимаю, там все очень плохо с описаниями в стандарте. Ты можешь почитать разбор на полтора экрана, почему move ctor оставит вектор пустым. Вроде такие ветвления (был доклад какой-то доклад про cmove и конвейеры, но тебе лучше знать, наверное) не сильно проблемные, но тут я не уверен в деталях
источник

CD

Constantine Drozdov in pro.cxx
В худшем случае можно написать capacity = 2 * capacity + 2
источник

CD

Constantine Drozdov in pro.cxx
Как я понимаю, так не делают и какие-то причины на это есть
источник

I

Ioann_V in pro.cxx
но все равно, хуже чем capacity << 1
источник

CD

Constantine Drozdov in pro.cxx
Видимо, считается, что дёрнуть аллокатор и так вечность
источник

I

Ioann_V in pro.cxx
да, мне интересны именно причины, и почему в Def ctor нельзя выделять буффер...
источник

I

Ioann_V in pro.cxx
Ведь вектор, чаще полон чем пуст... + ключевая фигура на вашем поле. Даже микро оптимизации, имеют место быть.
источник

CD

Constantine Drozdov in pro.cxx
Ой какой не факт, особенно если не было reserve
источник