Войти
ПрограммированиеФорумОбщее

C++. Что это? Баг visual studio? (4 стр)

Страницы: 1 2 3 4
#45
14:21, 6 сен. 2017

amd.fx6100
> выкидывать просто так нельзя. это ссылка на функцию.  у меня в большом проекте
> используются ссылки на функции. надо на аналог заменить.  что-то типа
> std::function.  но тут надо смотреть, думать, проверять.
Понятно не просто так выкинуть, а изменить на что-то рабочее. А зачем, кстати, подобная конструкция нужна? Зачем хранить указатель на собственный же метод?


#46
14:30, 6 сен. 2017

Bowman
> Понятно не просто так выкинуть, а изменить на что-то рабочее. А зачем, кстати,
> подобная конструкция нужна? Зачем хранить указатель на собственный же метод?
Есть функции которые в зависимости от разных условий вызывают другие разные функции. причем в цикле.  при этом требуется большое быстродействие. Поэтому сначала надо определить что вызывать. и дальше в цикле многократно вызывается через ссылки на функции.
В качестве условия может быть какое-то число или тип или что-то еще.    Из за того что требуется быстро работать std::function не подходит.  Так вообще ничего не подходит.  Разве что на чистый СИ перейти.

#47
14:41, 6 сен. 2017

т.е. студия (с 2013 по 2017) не умеет выравнивать ссылки на функции в структурах? Но это же странно. Должно же быть объяснение в стандарте.

#48
14:57, 6 сен. 2017

kipar
> т.е. студия (с 2013 по 2017) не умеет выравнивать ссылки на функции в
> структурах? Но это же странно. Должно же быть объяснение в стандарте.
Умеет, я пробовал указатель на просто функцию и указатель на метод другого класса - всё работает нормально. Проблемы начинаются если членом класса сделать указатель на собственный же метод, как у amd.fx6100. Нужно знатоков стандарта поспрашивать, может это просто глюк студии, а может есть какое-то правило и оригинальный код приводит к UB.

#49
14:57, 6 сен. 2017

kipar
> т.е. студия (с 2013 по 2017) не умеет выравнивать ссылки на функции в
> структурах?
2005 и vc6 точно так же себя ведут.

#50
15:11, 6 сен. 2017
С++ — это баг Visual Studio, да.
#51
15:19, 6 сен. 2017

amd.fx6100
> Есть функции которые в зависимости от разных условий вызывают другие разные функции. причем в цикле. при этом требуется большое быстродействие.

Если требуется быстродействие, то первое, что стоит сделать — это избавиться от вызовов функций по указателю в циклах.

Указатель на функцию-член всегда можно заменить на просто указатель на функцию, заодно тип и логика его работы станет проще.
#52
15:48, 6 сен. 2017

amd.fx6100
> Это баг visual studio?
нет, это - не баг.
это такая фича.

баг у вас в коде.
я указал причину ещё в #27 сообщении,
даже не видя вашего кода

+ Показать
#53
15:51, 6 сен. 2017

kipar
> т.е. студия (с 2013 по 2017) не умеет выравнивать ссылки на функции в
> структурах?
при чем тут студия?
студия - всего лишь умный текстовый блокнот.

другое дело, что на сегодняшний день
ни один из компиляторов этого делать морально так и не научился - это факт.

Alprog
> С++ — это баг Visual Studio, да.

баг по причине нарушения ODR - это баг в прокладке между стулом и монитором,
а не в вижул студии.

Страницы: 1 2 3 4
ПрограммированиеФорумОбщее

Тема в архиве.