Heim > Backend-Entwicklung > C++ > Wie übergebe ich Referenzen auf C-Standardbibliotheksobjekte an Threads ohne Kompilierungsfehler?

Wie übergebe ich Referenzen auf C-Standardbibliotheksobjekte an Threads ohne Kompilierungsfehler?

Susan Sarandon
Freigeben: 2024-11-20 15:29:11
Original
340 Leute haben es durchsucht

How to Pass C   Standard Library Object References to Threads Without Compilation Errors?

Übergabe von Objektreferenzargumenten an Thread-Funktionen: Überwindung von Kompilierungsfehlern

Übergabe von Referenzen an C 11-Standardbibliotheksobjekte wie std::ostream Bei Thread-Funktionen kann es zu Kompilierungsproblemen kommen. Dies liegt daran, dass Threads standardmäßig ihre Argumente kopieren.

Um eine Referenz explizit zu übergeben, umschließen Sie sie mit std::ref oder std::cref für konstante Referenzen. Hier ist eine modifizierte Version des bereitgestellten Beispiels:

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;
}
Nach dem Login kopieren

Durch die Verwendung von std::ref erstellen Sie einen Referenz-Wrapper, der sich wie ein Wertsemantikobjekt verhält. Mehrere Kopien des Wrappers verweisen auf dieselbe zugrunde liegende Referenz, sodass der Thread korrekt auf das std::ostream-Objekt zugreifen kann.

Denken Sie daran, sicherzustellen, dass das Objekt, auf das verwiesen wird, während der gesamten Lebensdauer des Threads gültig bleibt.

Das obige ist der detaillierte Inhalt vonWie übergebe ich Referenzen auf C-Standardbibliotheksobjekte an Threads ohne Kompilierungsfehler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage