问题标签 [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.

0 投票
1 回答
449 浏览

c++ - 为什么我的二进制文件的大小取决于我的数组的大小?

我最近偶然发现了一个非常奇怪的代码膨胀效应,我真的无法向自己解释......以下是一个工作最小的例子:

生成的二进制文件(使用 GCC MinGW 4.9.2 x86_64 posix sjlj 构建)大小为15.28 MB。但是,如果您设置例如SIZE = 1,您将获得一个17 KB的二进制文件。

那么为什么二进制的大小取决于这里数组的大小呢?显然,该效果是由结构是单例引起的。然而,我仍然看不出编译器会膨胀二进制文件的任何合理推理。谢谢你的帮助!

(在优化和不优化的情况下-std=c++11仅使用标志进行测试。顺便说一句,这也发生在 C 样式的数组中......)

0 投票
6 回答
56548 浏览

c++ - std::array 与数组性能

如果我想构建一个非常简单的数组,例如

我应该std::array改用吗?

与通常的相比,使用 std::array 有什么优势?它的性能更高吗?只是更容易处理复制/访问?

0 投票
3 回答
4218 浏览

c++ - 如何在给定 C++ 指针的情况下访问 std::array 的元素

我试图std::array在 C++ 中访问给定指针的元素。这是一些说明我的问题的代码:

我希望这会std::array在新行上打印的每个元素。但是,它甚至没有通过编译:

这里发生了什么?
谢谢!

0 投票
3 回答
2464 浏览

c++ - 在构造函数的初始化列表中使用 std::initializer_list 初始化 std::array

考虑以下代码:

上面的代码可以正常编译v并按预期进行初始化。现在考虑以下代码:

上面的代码给出了编译错误。

错误:没有从“std::initializer_list”到“int”的可行转换

在网上搜索我发现std::array用 a初始化成员的“正确”方法std::list_initializerreinterpret_cast按以下方式使用:

问:

为什么我可以在构造函数的初始化列表中使用 a 来初始化成员std::vectorstd::initializer_list但我不能成为成员std::array

上面显示的解决方法是用reinterpret_cast正确的方法初始化成员std::arraystd::initializer_list

0 投票
2 回答
1288 浏览

c++ - 当我聚合初始化一个数组而 gcc 没有时,Clang 警告我

当我用 CLANG 编译以下代码时:

通过发出命令:

clang++ -std=c++14 -O2 -Wall -pedantic -pthread main.cpp

它发出警告:

警告:建议在子对象初始化时使用大括号 [-Wmissing-braces]

铿锵演示

但是,GCC 编译该程序时根本不会发出警告。

海合会演示

问:

  1. 哪个编译器是对的?
  2. Clangs警告我的原因是什么?
0 投票
1 回答
433 浏览

c++ - Visual Studio std::array 初始化程序错误 (2797)

Visual Studio 目前有一个问题,导致以下内容无法编译,出现错误,

错误 C2797:“vec::v”:未实现成员初始化器列表或非静态数据成员初始化器内的列表初始化

它的Microsoft Connect 票证已关闭,但有一篇关于它的 MSDN 文章建议“使用内部列表的显式构造”。我不明白如何做到这一点,而且代码对我来说看起来很陌生(初学者)。

任何人都可以协助使用 std::array 的示例吗?

0 投票
1 回答
44975 浏览

c++ - 调用隐式删除的默认构造函数

当我尝试编译我的 C++ 项目时,我收到错误消息Call to implicitly-deleted default constructor of 'std::array' 。

头文件cubic_patch.hpp

源文件cubic_patch.cpp

有人可以告诉我这里有什么问题吗?我发现了类似的主题,但并不完全相同,而且我不理解给出的解释。

谢谢。

0 投票
2 回答
138 浏览

c++ - 存储任何(但恒定)长度的 std::arrays 集

有没有办法存储一组任何(但恒定)长度的 std::arrays,其中数组的长度可以稍后在 constexpr 中使用?

我想标准容器是没有问题的,但可能会有某种模板解决方案。所有信息在编译时都可用,不是吗?

示例代码:

更新:

要求提供更多详细信息,所以就到这里。我真的不在乎数组是如何定义的,任何有效的东西......使用的确切 constexpr 是示例代码中的那个,std::make_index_sequence<CONSTEXPR>{}. 我只知道我有一组在编译时定义的常量数组,并且应该以某种方式可以在 constexpr 的其他地方引用它们的长度

哎呀,我实际上只存储长度就可以了:

0 投票
1 回答
2006 浏览

c++ - std::array<> 的初始化

考虑以下代码:

使用 gcc 编译:

NB1:注释掉第一个初始化语句,代码编译没有错误。
NB2:将所有初始化转换为构造函数调用会产生相同的结果。
NB3:MSVC2015 的行为相同。

我可以看到为什么第一次初始化无法编译,为什么第二次和第三次都可以。(例如参见C++11:正确的 std::array 初始化?。)

我的问题是:为什么最终的初始化会编译?

0 投票
3 回答
2377 浏览

c++ - 为什么 std::array 临时 constexpr 的 operator[] 不是?

当我发现在 C++11 中不能使用元素作为初始化程序时,我正在将一些值填充到 a 中constexpr std::array,然后将编译时静态特性继续添加到更多值中。constexprconstexpr

这是因为std::array::operator[]实际上constexpr直到 C++14 才被标记:https ://stackoverflow.com/a/26741152/688724

编译器标志升级后,我现在可以使用 a 的元素constexpr std::array作为constexpr值:

但有时我想在constexpr计算中使用临时数组,但这不起作用。

我从带有 -std=c++14 的 clang++ 3.6 得到这个:

我要索引的两个变量之间有什么区别?为什么我不能使用直接初始化的std::array临时operator[]as constexpr