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;
}
Répondre
lignes comme:
void some_function();
simplement déclarer une fonction qui sera définie ultérieurement. Les fonctions ne doivent pas nécessairement être déclarées en dehors de la portée de la fonction.
Ce que je me demande vraiment, c'est que c'est dans une définition de fonction? – Liu
@Liu: Non, c'est une * déclaration * - elle déclare simplement qu'il y a une fonction nommée 'some_function' qui retourne' void' et ne prend aucun paramètre. La définition est vraisemblablement quelque part plus tard dans le même fichier. –
Merci, désolé pour mon mauvais C++! – Liu
C'est juste une déclaration de fonction, comme vous le pensiez. Il est courant (et recommandé) de placer les déclarations de fonction dans les fichiers d'en-tête, mais cela n'est en aucun cas nécessaire. Ils peuvent être dans des corps de fonction.
Définir une fonction renvoyant un objet thread
:
std::thread f()
{
Déclare une fonction extern
sans argument retour void
(généralement cela ne se fait dans la portée locale, mais il est valide):
void some_function();
Démarrer un thread exécutant cette fonction et lui renvoyer un handle:
return std::thread(some_function);
}
deal même que précédemment:
std::thread g()
{
void some_other_function(int);
Mais ce n'est pas valide. Vous ne pouvez pas faire une copie d'un thread, donc techniquement ce n'est pas OK pour créer un objet local thread
puis le renvoyer. Je serais surpris si cela compilé, mais si c'est le cas, il pourrait casser lorsque vous construisez pour le débogueur.
std::thread t(some_other_function,42);
return t;
}
Cela fonctionnerait, bien que:
return std::move(t);
Merci pour votre explication détaillée! – Liu
- 1. php Déclarations de fonctions OOP
- 2. Déclarations de fonctions externes DLL en C#
- 3. C++ modèles et déclarations de fonctions externes
- 4. de déclarations dans include et require fonctions
- 5. Jquery toutes mes fonctions fonctionnent sauf les suivantes
- 6. je n'obtenir ce que les déclarations de variables de pointeur suivantes signifient dans c
- 7. Quelqu'un peut-il expliquer la différence entre les fonctions de fermeture et les fonctions anonymes?
- 8. Les déclarations de ligne MySQL?
- 9. déclarations ambigües
- 10. Java si les déclarations
- 11. omettant « def » dans les déclarations Groovy
- 12. Problèmes avec les déclarations et les initialisations
- 13. obtention de déclarations de variables
- 14. slimbox après un appel ajax, en utilisant les fonctions suivantes/précédentes
- 15. Étranges erreurs dans les clips
- 16. différence dans la coulée dans les 2 méthodes suivantes
- 17. RankNTypes pour les déclarations d'instance?
- 18. Passer vs si les déclarations
- 19. Étranges erreurs de compilation avec les codes :: blocks
- 20. ne html comprendre les déclarations de l'état
- 21. mysqli, les boucles, et les déclarations préparées
- 22. Comment effectuer les opérations suivantes dans ListView
- 23. Comment accomplir les opérations suivantes dans LDAP?
- 24. Comment filtrer les listboxes suivantes dans asp.net?
- 25. performances pour les requêtes suivantes wmi
- 26. imprimer toutes les lignes suivantes correspondent ligne
- 27. Comment puis-je trouver les données suivantes
- 28. Comment représenter les données suivantes en XML?
- 29. Comment entrer les données suivantes dans prolog?
- 30. Comment expliquer les arbres de supervision d'Erlang?
Je pense qu'il peut y avoir eu un conflit d'édition ... désolé ... mais je ne vois pas la question de toute façon. Pourriez-vous au moins ajouter un commentaire au code sur ce que vous pensez être étrange ou manquant? – Potatoswatter
Désolé pour mon mauvais anglais. – Liu
@Liu: ne laissez pas votre pauvre anglais vous décourager d'essayer d'exprimer votre question. 1) La pratique rend parfait. 2) En ce moment, nous n'avons rien à répondre. – Potatoswatter