方法内联时数组不会更改
Array doesn't change when method inlined
这是我的堆栈类的一部分。它在闪存中工作正常,但在 cpp/windows 中,推送方法并不总是有效。我不太了解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 等。
这是一个
haxe/hxcpp错误。我将其简化为基本情况,事实证明,如果您将数组变量设置为新实例,它现在只能正常工作,这是我在其他地方意外做的。
https://github.com/HaxeFoundation/haxe/issues/4187
相关文章:
- 初始化具有非默认构造函数的std::数组项的更好方法
- 复制几乎为空的数组的最快方法
- 通过JNI传递数据数组的最快方法是什么
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 数组元素打印的递归方法
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- C++数组队列实现方法错误
- 寻找一种更好的方法来表示无符号字符数组
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- 初始化数组、"memset"或" {//value} "的最佳方法是什么?
- 创建异构顶点数据数组的可移植方法
- 打印字符数组地址的正确方法
- 还有其他方法可以在数组中写入多维数组吗?
- 从数组中删除非唯一值、保持顺序和不使用向量的最佳方法?
- 指针数组方法的向量push_back编译但不运行
- 在函数内部使用数组方法
- 如何获取方法内部int数组(方法参数)的长度
- 如何在c++中访问向量类数组方法