return std::array

Ich bin die Implementierung einiger Klassen zur Darstellung von Zuordnungen (im mathematischen Sinne), d.h., f : R x R^n -> R^n. Ich würde gerne implementieren Sie eine abstrakte Basisklasse, die entweder:
1) Nimmt einen std::array als Referenz und ändert es
oder
2) liefert ein std::array (per Wert oder per Referenz -, nicht sicher?)

Die syntax von option 2 ist mehr wünschenswert, für mich, einfach weil ich denke, der code sieht mehr wie die Mathematik, die ich bin versucht zu stellen, aber ich möchte sichergehen, dass ich mich nicht unnötig kopieren und induzieren eine Reihe von unerwünschten overhead. Zum Beispiel, wenn ich einen hätte:

//Function f declaration
std::array<double, 4> f(double t, const std::array<double, 4> & x);

//Some code snippet that uses f
std::array<double, 4> x = {0.0, 1.0, 2.0, 3.0};
double t = 0.0;
std::array<double, 4> dxdt = f(t, x);

Wie kann ich ermitteln, ob eine Kopie wird durchgeführt auf der letzten Zeile, oder wie kann ich sicherstellen, dass es nicht passieren?

Innerhalb der definition von f(), was würde ich tun müssen (wenn überhaupt), um sicherzustellen, dass diese zurückgegeben wird, ohne einen Aufruf der copy-Konstruktor? Ich will halten die Nutzung einfach, sodass Kunden nicht brauchen, um verwenden Sie die Zeiger oder smart-Pointer, aber vielleicht ist dies notwendig?

Ich weiß, ich kann ändern Sie dies auf "void" zurückgeben und nur eines der Argumente sein, std::array dxdt, aber ich mag den Rückgabewert syntax besser, solange es keine Leistungseinbußen oder memory-leak-Probleme.

Schreibe einen Kommentar