问题标签 [stdarray]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - std::valarray 和 std::array 有什么区别
valarray
班级看起来和班级一样,你能解释一下array
我更喜欢哪里吗?反之亦然?valarray
array
c++ - 指向 std::array 成员的指针
假设我有一个结构,其中包含另一个结构类型的对象数组,如下所示:
是否可以可移植地编写一个表达式,该表达式将评估给定数组元素的给定属性的指向成员的指针?像&bar::foos[2]::x
什么?
该应用程序是embind:如果可能,我想将这样的嵌套 C++ 类型映射到线性 JavaScript 元组。如果使用指向成员的指针不起作用,那么我可能会尝试使用 getter 和 setter 方法,但我仍然想知道是否有办法获得这样的指向成员的指针。
c++ - 从 C 样式数组到 std::array 的转换对于数组来说是完全安全的吗?
第一次提问者:) 是否可以在不破坏代码的情况下将全局 c 样式数组转换为 std::arrays ?我正在开发一个项目,其中包括反编译旧游戏的源代码。我们已经设法重构了大部分反汇编/反编译输出。由于它是自动的,因此仍然有类似的部分
或者
以及剩余的其他类型的疯狂指针算法,尚未手动重构。但是我们想对已经(大概)正确更改为数组的部分使用边界检查。
(忽略斜体文本,我保留它只是为了在评论中保持一致)到目前为止,我发现每个数组都有一个问题:sizeof(class containing array)
会改变。这可能会在某些循环中破坏代码,例如 someclass somearray[100]; //例如 (sizeof(somearray[0]) == 50) 为真 int pointer = (int)somearray; 指针 += 100 ((someclass )pointer)->doSomething(); . 因为pointer +=100
不会指向第二个元素,而是第一个元素,甚至第零个元素,我不确定(不要忘记它是自动反编译的代码,因此很丑)。
我正在考虑将每个全局数组更改为 std::array 以及在没有[]
运算符 to的情况下访问数组的每个实例array._Elems
。
如果我在这样的代码中将全局数组更改为 std::arrays 是否会出现任何问题?
编辑 关于尺寸不变,你是对的。我在测试功能中有错误。所以我将扩展问题:
将每个 c 样式数组更改为 std::array 是否安全?
编辑 我们当前的代码实际上只能在调试模式下运行,因为它不会移动变量。发布模式基本上在程序开始时崩溃。
编辑 由于这个问题似乎有些混乱,让我澄清一下:除了 T elems [N] 之外,是否有一些保证数组中没有其他成员?我可以指望拥有
并确保 ptr 指向varname[1][0]
而不考虑实现细节?尽管可以保证数组是连续的,但我对此不确定。该标准包含一个实现,但我不确定这是一个示例实现还是每个实现都应该遵守的实际定义,迭代器和 const_iterator 是唯一特定于实现的东西,因为只有那些有实现定义的词(我手头没有最新的规范,因此可能存在一些其他差异)。
c++ - 不需要内存空间的 C++ 零大小数组?
在声明模板类的成员变量时,有没有办法根据某些模板参数的值使其需要零内存?
一个例子是定义类似的东西std::array<T,n>
,当n==0
.
例如:
有没有办法消除 optional_args 的开销num_optional_args==0
?
大多数std::array<T,n>
为一个元素保留空间的实现,T
即使n==0
.
还有另一种方法可以保留零空间吗?为什么这不是 C++ 标准的一部分?
c++ - 将未知大小的 std::array 传递给函数
在 C++11 中,我将如何编写一个采用已知类型但未知大小的 std::array 的函数(或方法)?
在我的搜索过程中,我只发现了使用模板的建议,但这些建议看起来很混乱(标题中的方法定义)并且对于我想要完成的事情来说太过分了。
有没有一种简单的方法来完成这项工作,就像使用普通的 C 样式数组一样?
c++ - C 样式数组的替代方案有多可行?
既然我们有了std::array
,std::vector
和大括号初始化,还需要 C 风格的数组吗?
templates - C++11 返回一个不同大小的 std::array
我想创建这样一个结构:
我知道
和
是不同的结构,所以这是不可能的。我怎样才能以不同的方式管理它?我必须byte_t*
从方法返回吗?
c++ - 是 std::array作为类成员零初始化?
问题:
- 是
c.stdArr
零初始化的吗? - 如果是 - 为什么?
我自己矛盾的答案:
它是零初始化的:
std::array
想要表现得像一个 c 数组。如果在我上面的示例stdArr
中是一个 c 数组,它将stdArr()
在初始化列表中被初始化为零。我希望member()
在初始化列表中写入会初始化对象。它不是零初始化的:
std::array
通常只有一个成员,就我而言int[10] _Elems;
- 通常基本类型和基本类型数组
int[N]
都不是默认初始化的。 std::array
是一个聚合类型,这意味着它是默认构造的。- 因为没有初始化的自定义构造函数
_Elems
,我认为它不是零初始化的。
std::array
根据 C++11 标准,正确的行为是什么?
c++ - 如何在 gdb 中打印 `std::array` 内容?
我对 gdb 不是很熟悉,并且不知道如何在 gdb 手册中查找这种情况。
我正在尝试打印std::array
gdb 中的内容。下面是我试图在 gdb 中调试的用例。
在此函数中,我尝试打印p v1
. 它打印(const mosp::Point<2u> *) 0x7fffffffc150
。如何打印的内容v1
?
c++ - 无法复制从默认构造的数组构造的对象
在花费 1 或 2 个小时来隔离编译错误后,该编译错误被元编程混乱所包围,生成糟糕的编译消息,这里有一个最小且简单的示例来说明我的问题:
这是用 g++ 4.8.1 编译的,我不明白为什么当我尝试复制而不是复制时编译c
器d
会a
抱怨b
.
这是错误: