这是我的堆栈类的一部分。它在 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
关键字,它会一直正常工作。
内联(替换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等