数组不会更改的方法时,内联

问题描述 投票:6回答:1

这是我的筹码类的一部分。它工作正常闪光灯,但在CPP /窗,推送方法并不总是工作。我不明白C ++不够好理解为什么它可能是不一致的。

var arr:Array<T>;
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) -> []
}

push被内联,像stack.push(0)并不总是改变数组,像它的真实长度(但是length变量确实增加,)固定为0。其他时候,它工作正常。如果我删除inline关键字,它工作正常,所有的时间。

内联(替换stack.push(0))时所生成的CPP:

::msg::utils::Stack tmp = this->stack;
::msg::utils::Stack _this = tmp;
Array< int > tmp1 = _this->arr;
int tmp2 = (_this->length)++;
tmp1[tmp2] = (int)0;

而当没有内联(内push()):

Dynamic tmp = this->arr;
int tmp1 = (this->length)++;
Dynamic tmp2 = t;
hx::IndexRef((tmp).mPtr,tmp1) = tmp2;

是否有什么我缺少C ++呢?为什么会内联代码工作的大部分时间,但是再不行其他时间?

最新haXe的,hxcpp,openfl等。

c++ arrays windows haxe hxcpp
1个回答
2
投票

这是一个haXe的/ hxcpp错误。我减少下来的基本情况,而且事实证明,它只有在你的数组变量设置为一个新的实例,这是我在做什么意外别处正常工作了。

https://github.com/HaxeFoundation/haxe/issues/4187

© www.soinside.com 2019 - 2024. All rights reserved.