问题标签 [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++ - 为什么我的二进制文件的大小取决于我的数组的大小?
我最近偶然发现了一个非常奇怪的代码膨胀效应,我真的无法向自己解释......以下是一个工作最小的例子:
生成的二进制文件(使用 GCC MinGW 4.9.2 x86_64 posix sjlj 构建)大小为15.28 MB。但是,如果您设置例如SIZE = 1
,您将获得一个17 KB的二进制文件。
那么为什么二进制的大小取决于这里数组的大小呢?显然,该效果是由结构是单例引起的。然而,我仍然看不出编译器会膨胀二进制文件的任何合理推理。谢谢你的帮助!
(在优化和不优化的情况下-std=c++11
仅使用标志进行测试。顺便说一句,这也发生在 C 样式的数组中......)
c++ - std::array 与数组性能
如果我想构建一个非常简单的数组,例如
我应该std::array
改用吗?
与通常的相比,使用 std::array 有什么优势?它的性能更高吗?只是更容易处理复制/访问?
c++ - 如何在给定 C++ 指针的情况下访问 std::array 的元素
我试图std::array
在 C++ 中访问给定指针的元素。这是一些说明我的问题的代码:
我希望这会std::array
在新行上打印的每个元素。但是,它甚至没有通过编译:
这里发生了什么?
谢谢!
c++ - 在构造函数的初始化列表中使用 std::initializer_list 初始化 std::array
考虑以下代码:
上面的代码可以正常编译v
并按预期进行初始化。现在考虑以下代码:
上面的代码给出了编译错误。
错误:没有从“std::initializer_list”到“int”的可行转换
在网上搜索我发现std::array
用 a初始化成员的“正确”方法std::list_initializer
是reinterpret_cast
按以下方式使用:
问:
为什么我可以在构造函数的初始化列表中使用 a 来初始化成员std::vector
,std::initializer_list
但我不能成为成员std::array
?
上面显示的解决方法是用reinterpret_cast
正确的方法初始化成员std::array
吗std::initializer_list
?
c++ - Visual Studio std::array 初始化程序错误 (2797)
Visual Studio 目前有一个问题,导致以下内容无法编译,出现错误,
错误 C2797:“vec::v”:未实现成员初始化器列表或非静态数据成员初始化器内的列表初始化
它的Microsoft Connect 票证已关闭,但有一篇关于它的 MSDN 文章建议“使用内部列表的显式构造”。我不明白如何做到这一点,而且代码对我来说看起来很陌生(初学者)。
任何人都可以协助使用 std::array 的示例吗?
c++ - 调用隐式删除的默认构造函数
当我尝试编译我的 C++ 项目时,我收到错误消息Call to implicitly-deleted default constructor of 'std::array' 。
头文件cubic_patch.hpp
源文件cubic_patch.cpp
有人可以告诉我这里有什么问题吗?我发现了类似的主题,但并不完全相同,而且我不理解给出的解释。
谢谢。
c++ - 存储任何(但恒定)长度的 std::arrays 集
有没有办法存储一组任何(但恒定)长度的 std::arrays,其中数组的长度可以稍后在 constexpr 中使用?
我想标准容器是没有问题的,但可能会有某种模板解决方案。所有信息在编译时都可用,不是吗?
示例代码:
更新:
要求提供更多详细信息,所以就到这里。我真的不在乎数组是如何定义的,任何有效的东西......使用的确切 constexpr 是示例代码中的那个,std::make_index_sequence<CONSTEXPR>{}
. 我只知道我有一组在编译时定义的常量数组,并且应该以某种方式可以在 constexpr 的其他地方引用它们的长度。
哎呀,我实际上只存储长度就可以了:
c++ - std::array<> 的初始化
考虑以下代码:
使用 gcc 编译:
NB1:注释掉第一个初始化语句,代码编译没有错误。
NB2:将所有初始化转换为构造函数调用会产生相同的结果。
NB3:MSVC2015 的行为相同。
我可以看到为什么第一次初始化无法编译,为什么第二次和第三次都可以。(例如参见C++11:正确的 std::array 初始化?。)
我的问题是:为什么最终的初始化会编译?
c++ - 为什么 std::array 临时 constexpr 的 operator[] 不是?
当我发现在 C++11 中不能使用元素作为初始化程序时,我正在将一些值填充到 a 中constexpr std::array
,然后将编译时静态特性继续添加到更多值中。constexpr
constexpr
这是因为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
?