これは私のスタック クラスの一部です。フラッシュでは問題なく動作しますが、cpp/windows ではプッシュ メソッドが常に機能するとは限りません。私は、C++ が矛盾している理由を理解できるほど 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 など