Cela fait partie de ma classe de stack. Cela fonctionne très bien en flash, mais dans cpp / windows, la méthode push ne fonctionne pas toujours. Je ne comprends pas assez bien C ++ pour comprendre pourquoi cela pourrait être incohérent.
var arr:Array; public var length(default, null):Int; public function new() { clear(); } public inline function clear():Void { arr = []; length = 0; } public inline function push(t:T):Void { // Log.trace(arr) -> [] arr[length++] = t; // Log.trace(arr) -> [] }
Lorsque push
est en ligne, quelque chose comme stack.push(0)
ne change pas toujours le tableau, comme sa vraie longueur est fixée à 0 (la variable de length
augmente cependant). D’autres fois, ça marche bien. Si je supprime le mot-clé en inline
, cela fonctionne correctement tout le temps.
La cpp générée lorsqu’elle est insérée (en remplacement de stack.push(0)
):
::msg::utils::Stack tmp = this->stack; ::msg::utils::Stack _this = tmp; Array tmp1 = _this->arr; int tmp2 = (_this->length)++; tmp1[tmp2] = (int)0;
Et quand pas en ligne ( push()
interne push()
):
Dynamic tmp = this->arr; int tmp1 = (this->length)++; Dynamic tmp2 = t; hx::IndexRef((tmp).mPtr,tmp1) = tmp2;
Y a-t-il quelque chose qui me manque dans C ++? Pourquoi le code intégré fonctionne-t-il la plupart du temps, mais ne fonctionne pas alors?
Dernières haxe, hxcpp, openfl, etc.
C’est un bug haxe / hxcpp. Je l’ai réduit au cas de base, et il s’avère que cela ne fonctionne correctement que si vous définissez la variable de tableau sur une nouvelle instance, ce que je faisais accidentellement ailleurs.