Re: Inline functions returning object
От: Константин Л.  
Дата: 30.03.06 14:57
Оценка:
Здравствуйте, twisted_mind, Вы писали:

_>В проекте (MSVC++ 7.1) есть класс, представляющий арифметический тип данных, и очень активно использующийся в вычислениях. Соответственно, у него есть куча перегруженных операторов (+, -, *, / и т. д.), возвращающих естественно объект этого класса. Большинство из них очень просты, а так как очень важна производительность, то хотелось бы сделать их встроенными. Но компилятор не может их встраивать при включенной поддержке C++ Exceptions, т.е. MSDN говорит:


_>Even with __forceinline, the compiler cannot inline code in all circumstances. The compiler cannot inline a function if:

_>...
_>The function returns an unwindable object by value, when compiled with /GX, /EHs, or /EHa.


_>С выключенными C++ Exceptions проверено, все нормально, он их встраивает в места вызова.


_>Пробовал указывать явно операторам и членам классов, что они не вызывают исключения (throw() и __declspec(nothrow)), но видимо это никакой роли не играет, важно что проект компилируется с /EHs. Установить отдельные опции компиляции на нужные файлы не получается, потому что определения функций должны находиться в заголовочных файлах, чтобы компилятор имел определение этих функций в каждом месте использования еще до линковки.


_>Вопрос. Как же всё-таки сделать функцию, возвращающую объект некоторого класса, встроенной, не выключаю поддержку C++ исключений для всего проекта?


1) Никогда не оптимизируйте
2) Если уж взялись оптимизировать — см. пункт 1

Г.Саттер "Решение сложных задач на с++"

Почитай, будет полезно. Если серьезно, то молится на чьи-то мысли не всегда хорошо, однако он говорит об умных вещах — "сначала смотреть профайлером".
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.