Maison > Article > développement back-end > Comment transmettre les références d'objets de la bibliothèque standard C aux threads sans erreurs de compilation ?
Passer des arguments de référence d'objet aux fonctions de thread : surmonter les erreurs de compilation
Passer des références aux objets de la bibliothèque standard C 11, tels que std::ostream , les fonctions de thread peuvent rencontrer des problèmes de compilation. En effet, les threads, par défaut, copient leurs arguments.
Pour transmettre explicitement une référence, enveloppez-la avec std::ref ou std::cref pour les références constantes. Voici une version modifiée de l'exemple fourni :
void foo(std::ostream &os) { // Do something with os os << "This should be printed to os" << std::endl; } int main() { std::thread t(foo, std::ref(std::cout)); t.join(); // Wait for the thread to complete return 0; }
En utilisant std::ref, vous créez un wrapper de référence qui se comporte comme un objet sémantique de valeur. Plusieurs copies du wrapper feront référence à la même référence sous-jacente, permettant au thread d'accéder correctement à l'objet std::ostream.
N'oubliez pas de vous assurer que l'objet référencé reste valide tout au long de la durée de vie du thread.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!