std::thread f()
{
void some_function(); // <- here
return std::thread(some_function);
}
std::thread g()
{
void some_other_function(int); // <- here
std::thread t(some_other_function,42);
return t;
}
ответ
линий, как:
void some_function();
просто объявить функцию, которая будет определена позже. Функции необязательно должны быть объявлены вне области действия.
Что мне действительно интересно, так это то, что он находится в функции defintion? – Liu
@Liu: Нет, это * объявление * - он просто объявляет, что существует некоторая функция с именем 'some_function', которая возвращает' void' и не принимает никаких параметров. Определение предположительно находится где-то позже в том же файле. –
Спасибо, извините за мой плохой C++! – Liu
Это просто объявление функции, как вы думали. Обычно (и рекомендуется) помещать объявления функций в файлы заголовков, но это отнюдь не требуется. Они могут находиться в функциональных органах.
Определить функцию, возвращающую thread
объект:
std::thread f()
{
Объявите extern
функцию без аргументов не возвращаются void
(как правило, это не делается в локальной области, но это справедливо):
void some_function();
Запустите нить, выполняющую эту функцию, и верните ей ручку:
return std::thread(some_function);
}
То же самое дело, как и раньше:
std::thread g()
{
void some_other_function(int);
Но это не действует. Вы не можете сделать копию потока, так что технически это не нормально, чтобы создать локальный объект thread
, а затем вернуть его. Я был бы удивлен, если бы это скомпилировалось, но если это произойдет, это может сломаться при создании для отладчика.
std::thread t(some_other_function,42);
return t;
}
Это будет работать, хотя:
return std::move(t);
Благодарим вас за подробное объяснение! – Liu
- 1. странные объявления пространств имен
- 2. Объяснить следующие RegEx
- 3. Кронштейны следующие объявления переменной
- 4. Что означают следующие объявления?
- 5. C порядок объявления функций
- 6. питон: как объяснить следующие коды
- 7. Может ли кто-нибудь объяснить непонимание с помощью функций?
- 8. plsregress - может ли кто-нибудь объяснить нормализацию функций?
- 9. Может ли кто-нибудь объяснить поведение функций mkpp и ppval?
- 10. Почему объявления переменных всегда переписывают объявления функций?
- 11. Переменные объявления, следующие за операторами
- 12. Может кто-нибудь объяснить, почему я получаю следующие ошибки?
- 13. Может кто-нибудь объяснить этот синтаксис объявления шаблона шаблона
- 14. Может кто-нибудь объяснить этот синтаксис объявления Objective C
- 15. Различные объявления функций
- 16. Как работают объявления функций?
- 17. Можно ли использовать локальные объявления функций?
- 18. Являются ли локальные объявления функций кэшированными?
- 19. Новый тип объявления функций?
- 20. Зачем допускать объявления функций внутри тел функций
- 21. Scala Reflection Conundrum: Можете ли вы объяснить эти странные результаты?
- 22. Как объяснить следующие термины (Курсор, Контекст, DatabaseHelper)
- 23. объяснить следующие Java/Groovy поведение на
- 24. Может ли кто-нибудь объяснить отображение сервлетов?
- 25. C++ - объявления функций внутри областей функций?
- 26. Можете ли вы объяснить это странное поведение объявления функции?
- 27. Странные комментарии выше объявления функции PHP
- 28. объявления для встроенных статических функций
- 29. AWS CloudFormation и объявления функций
- 30. Как объяснить поведение обработки функций?
Я думаю, что, возможно, был прав конфликт ... извините ... но я не нужный вопрос так или иначе. Не могли бы вы по крайней мере добавить комментарий к коду относительно того, что, по вашему мнению, странно или отсутствует? – Potatoswatter
Извините за мой бедный английский. – Liu
@ Liu: Не позволяйте своему бедному английскому языку отговаривать вас от попыток выразить свой вопрос. 1) Практика делает совершенным. 2) Сейчас нам нечего ответить. – Potatoswatter