这是我的筹码类的一部分。它工作正常闪光灯,但在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等。
这是一个haXe的/ hxcpp错误。我减少下来的基本情况,而且事实证明,它只有在你的数组变量设置为一个新的实例,这是我在做什么意外别处正常工作了。