2017-10-28 2 views
0

Skimming durch die TensorFlow C++ API ich auf einer seltsame Funktion Unterschrift gestolpert:Was ist der Zweck eines unformatierten Zeigers auf den Funktionsparameter unique_ptr in C++?

Status Create(
    const FileSystemStoragePathSourceConfig & config, 
    std::unique_ptr<FileSystemStoragePathSource> *result 
) 

Ich verstehe nicht, warum result ein roher Zeiger auf unique_ptr ist. Denn normalerweise, wenn wir unique_ptr als Funktionsparameter übergeben wollen, tun wir es entweder durch Verschieben (&&) oder durch Referenz & oder durch Wert. Ich habe den Anwendungsfall eines rohen Zeigers auf unique_ptr vorher nicht gesehen.

+0

Wilde Vermutung, weil die Person (en), die es geschrieben hat, out-Parameter lieber als By-Adresse und nicht als Referenz verwalten, wo die aufrufende Syntax leicht falsch interpretiert werden kann. – WhozCraig

+0

Außerdem kann der Ausgangsparameter optional sein. Etwas, das man nur mit Zeigern vor 'std :: optional 'machen kann. – StoryTeller

+0

"Nach Wert &" Sie möchten das neu formulieren. Durch Ref ist nicht nach Wert. – curiousguy

Antwort

4

TensorFlow wird von Google gemacht. Google's C++ style guide sagt:

Alle Parameter, die als Referenz übergeben werden, müssen mit const gekennzeichnet werden.

Die Implikation davon ist, dass alle Ausgabeparameter Zeiger sein müssen, keine Verweise. Dieser Stil ist kein idiomatisches C++ (die Standardbibliothek übergibt Ausgabeparameter per Referenz), aber Befürworter des Google-Stilleitfadens argumentieren, dass die Übergabe von Ausgabeparametern als Zeiger deutlicher macht, welche Parameter eingegeben und welche ausgegeben werden.

Verwandte Themen