2015-04-28 33 views
6

Bu, yığın sınıfımın bir parçası olduğunda değişmez. Flaşta iyi çalışıyor, ancak cpp/pencerelerde itme yöntemi her zaman çalışmaz. C++ 'ın neden tutarlı olmadığını anlamak için yeterince iyi anlamadım. gerçek uzunluğu (length değişken ancak artış yok) 0 da sabitlenmiştir gibi push satır içi Yöntem, satır içi yöntem

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) -> [] 
} 

, stack.push(0) hep böyle bir şey, diziyi değiştirmez. Diğer zamanlarda, iyi çalışıyor. inline anahtar sözcüğünü kaldırırsam, her zaman iyi çalışır.

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

Ve (push() içinde) inlined değilken:

oluşturulan cpp inlined zaman (stack.push(0) değiştirilmesi)

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

bir şey C++ yaptığı eksik var mı? Neden satır içi kod çoğu zaman çalışır, ancak başka zamanlarda işe yaramaz?

Son haxe, hxcpp, openfl vb

+5

Bu C++ gibi görünmüyor. C++ CLI ya da bunun gibi bir şey mi? –

+0

Gerçekten C++ değil. –

+0

satır içi, işlevselliğe hiçbir şey yapmamalıdır. Bunu dişli bir ortamda mı kullanıyorsunuz? Threading sorunları tutarsız davranış olarak görünebilir – Jay

cevap