Warum können keine arrays übergeben werden, die als Funktion der Argumente?

Warum kann man nicht das übergeben von arrays als Funktionsargumente?

Habe ich gelesen, das C++ - Buch, das sagt: "du kannst nicht vorbei-arrays als Funktionsargumente', aber es wird nie erklärt, warum. Auch, wenn ich online nachgeschaut fand ich Kommentare wie " warum tust du das überhaupt?' Es ist nicht so, dass ich es tun würde, ich will nur wissen, warum du es nicht kannst.

  • Bitte beachten Sie, den Körper von seinem text sagt, "mit Wert".
  • Wahrscheinlich, weil das kopieren von ganzen arrays für den alleinigen Zweck der übergabe durch Wert als eine Funktion argument wird leicht dazu führen, stack-überläufe und/oder schrecklich langsam?
  • silico: warum sind Sie Dann erlaubt zum erstellen von arrays als lokale Variablen, welche die gleiche automatische Lebensdauer?
  • "denn das ist, wie C [und C++, weil seine Wurzeln] arbeitet" 🙂 natürlich mit C++, könnte std::vector oder was auch immer...
  • Voigt: ich sehe nicht, wie das relevant ist für das Problem der übergabe von arrays per Wert. Was ich versuche zu bekommen, war, dass die übergabe von arrays durch Wert würde sicher beinhalten, das kopieren Ihrer Inhalte in den stack-frame, das ist eine Verschwendung von Zeit und Speicher, da die übergabe eines Zeigers auf das erste element gibt Ihnen die gleichen Möglichkeiten des Zugangs ist es aber so, dass Sie einfacher, schneller und weniger speicherintensiv.
  • Sie wissen nicht, wie groß das array ist. Also, wie viel Speicherplatz für den array dauern wird, bis auf dem stack? Aber ähnlich wie die fn(int x, ...); Wenn Sie könnte, dann würde es zu const, da das hinzufügen von Elementen würde ärger geben.
  • Aber es ist sehr anders als in C, um solche Entscheidungen zu treffen. Dürfen wir tun fast alles andere, was ist, wenn ich kopieren will mein array? Warum ist diese Regel gedämpft durch lediglich setzen das array in ein struct? Dein argument würde gelten, wie eine struct.
  • silico: ich bin adressieren Sie Ihren Kommentar zu stack overflow. Arrays als lokale Variablen stack-überlauf verursachen genauso schnell, wie array-Parameter. Nur übergeben Sie einen Zeiger (oder eine Referenz) hat sehr unterschiedliche Semantik, sowohl in Bezug auf aliasing und änderungen überleben der Aufruf der Funktion.
  • Nicht mehr ist es nicht.
  • Voigt: ich sehe, was du jetzt meinst. Ich stehe korrigiert.
  • Ich vergaß über arrays in structs. Ich tadeln es auf mein Vertrauen auf die C++ - Container. 🙂

Schreibe einen Kommentar