草庐IT

sizeof_array

全部标签

c++ - 通过来自任意索引的参数包初始化 std::array

通过可变模板参数初始化一个std::array,从给定的索引开始可以通过以下方式完成:#includetemplatestructA{templateA(size_ti,Ts...vals){constexprsize_tP=sizeof...(vals);std::arraytemp{vals...};for(size_tj=0;jarr;};但是否可以在不将参数包转换为临时元组或另一个std::array的情况下实现相同的目的? 最佳答案 您可以使用std::index_sequence和委托(delegate)构造函数:tem

c++ - 为什么 C++ 用零初始化 std::vector 而不是 std::array?

当你不想要它时,用零初始化一个vector不是浪费时间吗?我试试这段代码:#include#include#include#defineSIZE10intmain(){#ifdefVECTORstd::vectorarr(SIZE);#elsestd::arrayarr;#endif//VECTORfor(unsignedn:arr)printf("%i",n);printf("\n");return0;}我得到了输出:用vector$g++-std=c++11-DVECTORtest.cpp-otest&&./test0000000000用数组g++-std=c++11test.cp

c++ - C 风格数组与库接口(interface)的 std::array

我想编写一个带有提供读取功能的接口(interface)的库。C风格的数组容易出错,但允许传递任何大小的缓冲区。C++数组更安全,但强制使用大小来构造。//interface.h//C-stylearrayintread(std::uint8_t*buf,size_tlen);//C++arrayintread(std::array&buff)我怎样才能两全其美?我在考虑函数模板,但它对于库接口(interface)来说似乎不实用。templateintread(std::array&buf);编辑std::vector可能是一个很好的候选人,但如果我们考虑到char*和std::ar

c++ - 为什么这个数组的 sizeof() 是非法的?

我有以下数组:staticstd::pairtypemap_[];定义为std::pairtalos::Message::typemap_[8]={{talos::Message::Type::Empty,typeid(int).hash_code()},{talos::Message::Type::Keyboard,typeid(int).hash_code()},...为什么会这样sizeof(typemap_);给出一个编译时错误ErrorC2070'std::pair[]':illegalsizeofoperand即使这样sizeof(typemap_[0]);合法且数组大小固

C++/阿杜伊诺 : dynamic int array

我正在为Arduino编写类(class)。到目前为止一切顺利,但我现在有点卡住了...我已经在我的类中声明了一个int数组classmyClass{public:MyClass(intsize);private:int_intArray[];};当我初始化类MyClassmyClass1(5)时,我需要数组看起来像这样{0,0,0,0,0}。我的问题:我需要做什么才能使数组包含“大小”数量的零?MyClass::MyClass(intsize){//whatgoesheretodynamicallyinitializethearrayfor(inti=0;i编辑:跟进下面的各种回复,

c++ - 为什么 (&array)[i] 不取第 i 个元素的地址?

考虑以下代码inttab2[2];tab2[0]=5;tab2[1]=3;std::cout正如我在其他主题中读到的,数组可以衰减到指向其第一个元素的指针。那么为什么上面代码中的[]对tab2和&tab2的作用不同呢?有什么不同? 最佳答案 它已经“转换”为指针。您可以将[]符号与数组或指针一起使用...(&tab2)表示您获取数组的地址...从指针的角度来看,它是指向指针(**)的指针。所以你试图将一个变量(它是一个数组)转换为一个指针。好的,但是随后您尝试访问[1]元素,该元素当然不存在,因为您的指针指向您的数组地址......

c++ - sizeof() 的值是由编译器还是链接器决定的?

我正在尝试解决一个C++问题,我的代码的两部分为sizeof()运算符返回了不同的结果。这是我运行的MyClass*foo=newMyClass();intsize=sizeof(*foo)我将这段代码放在项目的两个不同部分,得到了两个不同的结果。一次是2254,另一次是2284。我可以查看内存布局,一个区域将内部成员显示为字节对齐,另一个区域显示为字对齐。我查看了dissasmbly,发现sizeof()值实际上是机器代码的一部分。这会是编译器或链接器中的错误吗?为什么同一个项目的两个部分会以不同的方式查看同一个类?编辑:让我提供一个更清楚的例子,我刚刚运行它来证明这不是ODR违规。

c++ - "except that a default constructed array is not empty"是什么意思?

在N3337中,我正在阅读§23.3.2.1/3,它指出:Anarraysatisfiesalloftherequirementsofacontainerandofareversiblecontainer(23.2),exceptthatadefaultconstructedarrayobjectisnotemptyandthatswapdoesnothaveconstantcomplexity.在§23.2.1,表96容器要求中,它显示了一个默认构造的对象Xu;,其中后置条件是u.empty()。据推测,以下内容:std::arraya;应该导致a.empty()输出1,它确实如此。

c++ - std::array 默认初始化还是值初始化?

根据cppreference,std::array的构造函数在创建std::array时执行默认初始化。但是,当我在VisualStudio12.0中进行一些测试时,在某些情况下std::array似乎正在执行值初始化。std::arrayarr1;//givesmesomegarbagevalues,asexpectedautoarr2=std::array();//givesmethree0,value-initialize?此外,当std::array是类的成员时,有时它具有不确定的值,有时它全为零。classContainer{public:Container()...int&

c++ - 为什么 sizeof(this - id) 返回 8?

我的代码中有一个非常愚蠢的拼写错误...is.read((char*)&this->id,sizeof(this-id));在this-之后缺少>字符有趣的是sizeof(this-id)返回了8!我的想法是...因为this是一个指针,对this做减法将导致另一个指针被id的值关闭,它可以是任何东西取决于id的值。还有...在64位系统上,指针通常是8个字节!我说的对吗?还是遗漏了什么?下面是我的类(class)。classIndexItem:publicSerializable{public:IndexItem(uint32_tid,std::streampospos):id(id