Мы говорили о функции и многопоточности с моим другом. Код примера:Mutex и встроенная функция
void SomeClass::Foo()
{
std::lock_guard<std::mutex> lock(mMutexObj);
statement1;
statement2;
statement3;
}
Итак, мы знаем, что иногда компилятор строит функции там, где это необходимо. Можно ли в таком случае: компилятор встраивает функции Foo
, все 3 заявления запуска и lock_guard
не работает, потому что сфера применения не заканчивается и не деструктор не называется:
// Inlined operations
std::lock_guard<std::mutex> lock(mMutexObj);
statement1;
statement2;
statement3;
// Global scope, where function was inlined continues here...
global statement1;
global statement2;
...;
Возможно ли это? Какой процент этот компилятор будет встроить в такую функцию, или, может быть, я не понимаю, в какой степени встроена функция?
Есть ли в подкладке разрешено изменять объем? Я всегда предполагал, что он добавляет '{' и '}' вокруг того, что было скопировано вокруг ... –
@ebyrob Я думаю, что изменение сферы действия приведет к хаосу. Использование #defines сделало бы это. Я думаю, что одна из причин для создания функций - это избежать проблем, вызванных #defines – maditya