import std.stdio;
class IntegerContainer
{
public int Integer = 1;
}
void DoubleInteger(IntegerContainer Container)
{
Container.Integer *= 2;
}
void main()
{
IntegerContainer Container = new IntegerContainer; // Internal integer defaults to one.
DoubleInteger(Container); // Internal integer changes to two inside the function.
writefln(Container.Integer); // Prints "2."
}
En D, la référence par rapport à la valeur est un trait du type plutôt que du paramètre de la fonction. Venant de C++, cela me fait vraiment mal.Comment transmettre un objet par valeur?
Il semble qu'il y ait un mot-clé ref
pour forcer le renvoi par référence pour les fonctions acceptant struct
s. Existe-t-il un tel équivalent pour le passage de class
es en valeur? Par exemple, disons que je veux créer une fonction qui renvoie une copie triée d'une classe de conteneur personnalisée. Par exemple, En C++, c'est aussi simple que d'utiliser Foo Sorted(Foo Object)
, par opposition à Foo Sort(Foo& Object)
. Je ne vois aucun moyen de le faire en D sans copier manuellement l'objet.
même avec des objets de classes, c'est toujours valeur par passe, parce que c'est la référence que vous passez, par valeur – newacct
@newacct Je pense que tout le monde sait ce que l'on entend par "valeur de transmission". – Maxpm