Ich denke, Sie finden nützliche . Siehe Abschnitt "Optionale Funktionsparameter".
Wenn Sie die Funktion aufrufen und eine Instanz von T übergeben, wird ein optionales Konstrukt erstellt, das seine eigene Kopie von T besitzt. Daher ruft es Ts Kopierkonstruktor auf.
int main()
{
T t;
optional<T> ot;
foo(t); // will create a copy
foo(ot); // won't create a copy
}
Um in der Lage sein, foo zu rufen und ein T passieren, ohne eine Kopie zu erstellen, können Sie foo als Aufnahme eine optionale Referenz, dh
void foo(optional<const T&> t)
Es kann keine Kopie erstellen, wenn Sie erklären, Nenne es nicht. Bitte poste ein [mcve]. – juanchopanza
Es hängt wirklich davon ab, wie Sie die Funktion aufrufen. – Rakete1111
Klingt wie du willst ein 'std :: optional>' stattdessen. –
StoryTeller