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

时间:2015-04-28 17:44:00

标签: c++ arrays windows haxe hxcpp

这是我的堆栈类的一部分。它在flash中工作正常,但在cpp / windows中,push方法并不总是有效。我不太了解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)这样的东西并不总是改变数组,就像它的真实长度固定为0一样(length变量确实增加了)。其他时候,它工作正常。如果我删除了inline关键字,它一直都能正常运行。

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

::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等

1 个答案:

答案 0 :(得分:2)

这是一个haxe / hxcpp错误。我把它减少到基本情况,结果证明它现在只有在你将数组变量设置为一个新实例时才能正常工作,我在其他地方偶然做了。

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