Здравствуйте, 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
Г.Саттер "Решение сложных задач на с++"
Почитай, будет полезно. Если серьезно, то молится на чьи-то мысли не всегда хорошо, однако он говорит об умных вещах — "сначала смотреть профайлером".