草庐IT

VT_ARRAY

全部标签

c++ - std::array 的内联初始化有什么问题?

考虑以下声明:#includestructX{//std::arrayarr={false,false,false};boolbrr[3]={false,false,false};};按原样,它可以通过g++5.2正常编译。但是如果我取消注释std::array,我会得到一个错误:test.cpp:5:46:error:arraymustbeinitializedwithabrace-enclosedinitializerstd::arrayarr={false,false,false};^test.cpp:5:46:error:toomanyinitializersfor‘std::

c++ - 如何在 C++11 中初始化(通过初始化列表)多维 std::array?

我正在尝试通过初始化程序列表初始化2Dstd::array,但是编译器告诉我初始化程序太多。例如:std::array,2>shape={{1,1},{1,1}};编译器错误:错误:‘std::array,2ul>’的初始化程序太多但显然没有太多。我做错了吗? 最佳答案 尝试再添加一对{}以确保我们正在初始化内部C数组。std::array,2>shape={{{1,1},{1,1}}};或者直接去掉所有的括号。std::array,2>shape={1,1,1,1}; 关于c++-如何

c++ - 为什么将数组的地址分配给指针 "my_pointer = &my_array"是编译错误?

intmy_array[5]={0};int*my_pointer=0;my_pointer=&my_array;//compilererrormy_pointer=my_array;//ok如果my_array是数组的地址,那么&my_array会给我什么?我收到以下编译器错误:error:cannotconvert'int(*)[5]'to'int*'inassignment 最佳答案 my_array是一个由5个整数组成的数组的名称。编译器会很乐意将其转换为指向单个整数的指针。&my_array是一个指向5个整数数组的指针。编

c++ - 宏定义 ARRAY_SIZE

我在阅读谷歌V8中的globals.h时遇到了如下宏定义项目。//TheexpressionARRAY_SIZE(a)isacompile-timeconstantoftype//size_twhichrepresentsthenumberofelementsofthegiven//array.YoushouldonlyuseARRAY_SIZEonstaticallyallocated//arrays.#defineARRAY_SIZE(a)\((sizeof(a)/sizeof(*(a)))/\static_cast(!(sizeof(a)%sizeof(*(a)))))我的问题是

c++ - GDB 问题 : Pretty-Printing a 2D Array?

我有一个二维数组矩阵[10][10],我想在调试时检查它。我知道我可以在GDB中使用p*matrix@10但它在一行中输出,难以阅读。有没有办法让这个输出以任何方式格式化,比如说矩阵? 最佳答案 GDB的一个重要特性是在被调试代码中执行函数的能力,因此您可以实现任何您喜欢的打印,例如:#includeintmatrix[10][10];voidprint(intmatrix[10][10]){inti,j;for(i=0;i使用-g开关编译此代码并在GDB下运行后,您可以使用打印功能如下:(gdb)callprint(matrix)

c++ - "C-style array"是什么意思,它与 std::array (C++ 风格)有何不同?

我在阅读std::arrayandstd::vector时遇到了这个问题. 最佳答案 C样式数组只是一个“裸”数组-即未包装在类中的数组,如下所示:char[]array={'a','b','c','\0'};如果您将其用作数组,则为指针:Thing*t=newThing[size];t[someindex].dosomething();而“C++样式数组”(非官方但流行的术语)正是您提到的-像std::vector(或std::array)这样的包装类>)。这只是一个包装类(实际上是一个C风格的数组),它提供了方便的功能,如边界检

c++ - 为什么 std::array<int, 10> x 不是零初始化但 std::array<int, 10> x = std::array<int, 10>() 似乎是?

我刚刚问了两个关于数组和值初始化的问题here和here.但是有了这段代码,我迷路了:#include#include#includetemplate().at(0))>inlineUf1(constunsignedinti){Tx;returnx.at(i);}template().at(0))>inlineUf2(constunsignedinti){Tx=T();returnx.at(i);}intmain(){staticconstunsignedintn=10;staticconstunsignedintw=20;for(unsignedinti=0;i>(i);std::c

c++ - 我们可以在 C++14 中省略 std::array 的双括号吗?

我现在正在阅读C++14的标准草案,也许我的法律术语有点生疏,但我找不到任何关于允许像下面这样的初始化的内容std::arrayarr{1,2,3};合法。(编辑:显然以上是C++11中的合法语法。)目前在C++11中,我们必须将std::array初始化为std::arrayarr{{1,2,3}};//uniforminitialization+aggregateinitialization或std::arrayarr={1,2,3};我以为我在某处听说他们正在放宽C++14中的规则,以便我们在使用统一初始化时不必使用双括号方法,但我找不到实际证据。注意:我关心这个的原因是因为我目

c++ - std::valarray 和 std::array 有什么区别

valarray类看起来与array类相同,你能解释一下我在哪里更喜欢valarray而不是array反之亦然? 最佳答案 valarray已经在C++03中,array在C++11中是新的valarray是变长的,array不是。valarray专为数值计算而设计,提供了丰富的操作,包括+、-、*、cos、sin等...array没有。valarray具有检索数组切片(子数组)的接口(interface),array没有。 关于c++-std::valarray和std::array有

c++ - 我应该如何初始化 boost::array?

我正在尝试理解boostarray.code可以从作者的网站上轻松阅读。在设计原理中,作者(NicolaiM.Josuttis)提到以下两种类型的初始化是可能的。boost::arraya={{1,2,3}};//Line1boost::arraya={1,2,3};//Line2在我对g++(4.1.2版)的实验中,第1行可以正常工作,但第2行不行。(第2行产生以下内容:warning:missingbracesaroundinitializerfor'int[4]'warning:missinginitializerformember'boost::array::elems')不过