Size: a a a

2021 February 10

D

Danya in pro.cxx
Пашечка
Статическую
Подскажите что такое статическая линковка, пожалуйста
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Danya
Что-то я не помню чтобы статическая линковка была
Статическая функа имеется в виду, у нее внутренняя линковка
источник

D

Danya in pro.cxx
Artöm Bakri Al-Sarmini
Статическая функа имеется в виду, у нее внутренняя линковка
А, ну ладно
источник

П

Пашечка in pro.cxx
Да, именно это и имел ввиду
источник

ПК

Побитый Кирпич... in pro.cxx
Пашечка
Подскажите, оптимизатор удалит if (val) { foo(); }, если вычисление и val, и foo() не имеет побочных эффектов? То есть, например val было посчитано заранее, а foo() это функция, которая в дебаге осуществляет вывод, а в релизе имеет пустое тело.
пустые функции с внутренней линковкой компиляторы спокойно выпиливают, если нет каких то спец. использований типа взятия адреса функции
источник

ПК

Побитый Кирпич... in pro.cxx
Хотя с каким нибудь msvc я бы проверил лишний раз
источник

П

Пашечка in pro.cxx
Побитый Кирпич
пустые функции с внутренней линковкой компиляторы спокойно выпиливают, если нет каких то спец. использований типа взятия адреса функции
А само условие тоже выпилится или останется пустым?
источник

ПК

Побитый Кирпич... in pro.cxx
Пашечка
А само условие тоже выпилится или останется пустым?
Не знаю, но логично и проверку убирать
источник

W

Wild_Wind in pro.cxx
Пашечка
Подскажите, оптимизатор удалит if (val) { foo(); }, если вычисление и val, и foo() не имеет побочных эффектов? То есть, например val было посчитано заранее, а foo() это функция, которая в дебаге осуществляет вывод, а в релизе имеет пустое тело.
> val посчитано заранее
Если это в одной единице трансляции, или с lto, то придет redundant code elimination и скажет, а че мы это always true/false проверяем? И выпилит if.
Пустую функцию, если от неё не берется адресс, и она не нужна - заинлайнит.
источник

W

Wild_Wind in pro.cxx
Если always false - придет dead code elimination и поудаляет все к чертям кошачьим.
источник

DS

Dmitry Sokolov in pro.cxx
Mikhail Kalugin
Прямо сейчас смотрю на stl из VC. Нода таки типизированная и содержит два указателя на ноды а так же данные, итератор действительно хранит указатель на ноду, но он типизированный и итератор реально заглядывает в ноду при работе (это же двухсвязный список, другого способа кроме как прочитать новый указатель из ноды ходить по списку просто нет).
Нода не содержит данные. Только потенциально. Для доступа к данным используется cast: https://github.com/llvm-mirror/libcxx/blob/master/include/list#L262
А через связи можно выйти и на ноду без данных, вот такую например: https://github.com/llvm-mirror/libcxx/blob/master/include/list#L569
источник

MK

Mikhail Kalugin in pro.cxx
Dmitry Sokolov
Нода не содержит данные. Только потенциально. Для доступа к данным используется cast: https://github.com/llvm-mirror/libcxx/blob/master/include/list#L262
А через связи можно выйти и на ноду без данных, вот такую например: https://github.com/llvm-mirror/libcxx/blob/master/include/list#L569
А это тогда что? _Tp __value_;
источник

MK

Mikhail Kalugin in pro.cxx
Но данных реально может не быть. head например
источник

DS

Dmitry Sokolov in pro.cxx
Mikhail Kalugin
Но данных реально может не быть. head например
В итераторе указатель на __list_node_base. Нет никаких __value_.
источник

MK

Mikhail Kalugin in pro.cxx
Dmitry Sokolov
В итераторе указатель на __list_node_base. Нет никаких __value_.
Да. Но речь о ноде. Итератор вообще просто хранит указатель на текущую ноду, все остальное - в ноде.
источник

MK

Mikhail Kalugin in pro.cxx
Данные и два указателя на соседние ноды.
источник

DS

Dmitry Sokolov in pro.cxx
Mikhail Kalugin
Да. Но речь о ноде. Итератор вообще просто хранит указатель на текущую ноду, все остальное - в ноде.
> И тут вопрос на засыпку. Как отличить лист от узла если структура - указатель на один из них.
Речь про то что по самому объекту отличать не надо, отличить можно через сравнение с end.
источник

MK

Mikhail Kalugin in pro.cxx
Иначе двухсвязный список просто не обеспечит O(1). Реально это работает так: Создается нода заполняются указатели в ноде и по одному у двух соседних. Все. Если бы данные были где-то еще - то и выделять их пришлось бы отдельно (и в общем случае так можно - тип value берется из шаблонных параметров, указатель тоже подходит, естественно)
источник

G

Ginny in pro.cxx
Здраствуйте, подскажите пожалуйста есть тут люди собиравшие и юзающие GammaRay Qt?
источник

MK

Mikhail Kalugin in pro.cxx
Dmitry Sokolov
> И тут вопрос на засыпку. Как отличить лист от узла если структура - указатель на один из них.
Речь про то что по самому объекту отличать не надо, отличить можно через сравнение с end.
Это же было о идее смешать ноду и данные. Хранить указатель на что-то из них и пытаться кастом получить другое.
источник