Inline functions returning object
От: twisted_mind  
Дата: 30.03.06 14:21
Оценка:
В проекте (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++ исключений для всего проекта?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.