kurze Verständnisfrage: macht es Sinn statt einem normalen argument also zB
Code: Alles auswählen
void function(int arg);
Code: Alles auswählen
void function(const int& arg);
grüsse,
Halan
Code: Alles auswählen
void function(int arg);
Code: Alles auswählen
void function(const int& arg);
Aber nur, falls die Kopie keine globale Wirkung hat. Übergäbe man einen std::vector by Value, wären da ein new [] und delete [] drin, und das würde kein Compiler der Welt wegoptimieren. Darum würde ich es 1. nur mit POD machen und 2. nur, falls ich weiß, dass mein Compiler keine zuverlässige Aliasing-Analyse durchführen kann (also nicht bei Visual C++ mit LTCG).kaiserludi hat geschrieben:Dazu ist noch zu ergänzen, dass Kopien vom Compiler gut weg optimiert werden können, wenn auf sie dann doch nur lesend oder gar nicht zugegriffen wird. Auf guten Compilern kann daher sogar bei großen Objekten die Kopie schneller sein als eine Referenz.
Code: Alles auswählen
#include <iostream>
class B
{
public:
B()
{
std::cout << "B" << std::endl;
}
B(const B& b)
{
std::cout << "B copy" << std::endl;
}
~B()
{
std::cout << "~B" << std::endl;
}
};
void foo(B b)
{
}
int main()
{
#if 0
B b;
foo(b);
#else
foo(B());
#endif
}
Na weil man eben so sagt :PKrishty hat geschrieben:Warum sagen eig alle „Seiteneffekte“?
Na weil man eben im Englischen "side effects" sagt und einige/viele Deutsche nicht mitbekommen haben, dass es mit "Nebeneffekten" übersetzt wird :Pdot hat geschrieben:Na weil man eben so sagt :PKrishty hat geschrieben:Warum sagen eig alle „Seiteneffekte“?
Danke. Das ist genau das was ich wissen wollte. Hast meine Vermutung bestätigt :)dot hat geschrieben:Ja, du sparst dir das Kopieren der Variablen. Referenzen werden vom Compiler aber normalerweise über Zeiger implementiert, daher wird bei Variante 2 eben stattdessen ein Zeiger kopiert. Für primitive Typen ist sowas also sinnlos. Übliche Faustregel: Die eingebauten Typen (int, float, double, etc.) übergibt man immer by value. Übergabe als Reference to const verwendet man bei größeren Objekten. Man darf dabei halt nie vergessen, dass man den gesparten Kopieroverhead durch eine zusätzliche Indirektion erkauft.
http://dict.leo.org/ende?lp=ende&search=side-effect ...BeRsErKeR hat geschrieben:Wohl eher "Nebenwirkungen" ...
Ich glaube Nebenwirkung ist weitaus gebräuchlicher als Nebeneffekt. Und ich bezog mich da auch eher auf Krishtys Aussage mit den "Risiken und Seiteneffekten" auf Packungsbeilagen. ;)Artificial Mind hat geschrieben:http://dict.leo.org/ende?lp=ende&search=side-effect ...BeRsErKeR hat geschrieben:Wohl eher "Nebenwirkungen" ...