Если я реализую оператор для класса, возможно ли, что он не будет встроенным? - PullRequest
1 голос
/ 01 августа 2010

Операторы всегда встроены?

struct foo {
    void operator ()() {
        // Do tons of work.
    }
};

int main() {
    foo f;
    f();
}

Ответы [ 3 ]

2 голосов
/ 01 августа 2010

Оператор - это нормальная функция, как и любая другая функция.

1 голос
/ 01 августа 2010

Компилятор - беспрецедентный и (официально) непредсказуемый властелин принимающих решений.Хорошие компиляторы предоставят некоторое руководство в документации о поведении их реализаций.Чем сложнее код, тем менее вероятно, что он будет встроен, вы можете найти несколько примеров того, что встраивается / нет в Википедии.

«Делать кучу работы» само по себе говорит о том, чтоВаш предполагаемый оператор слишком сложен для встроенных компиляторов.

Компилятор Microsoft Visual C ++ может быть создан для генерации предупреждений, когда он решает встроить функцию, которая не была помечена как встроенную, и когда она не встроена.это было отмечено в строке.Мне нравится, когда он чувствует, что он может встроенный.

1 голос
/ 01 августа 2010

Нет, это не так. Компилятор полностью свободен игнорировать все и любые запросы, чтобы функция была встроена. То, что он не может игнорировать, это то, что он должен давать им внутреннюю связь, поэтому заголовок, содержащий их, может быть включен в несколько единиц перевода.

...