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

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

Susan Sarandon
Susan SarandonOriginal
2024-11-20 15:29:11298Durchsuche

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;
}

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!

Stellungnahme:
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