草庐IT

初始化OpenStack

全部标签

c++ - C++中的数组类成员初始化

我有以下代码片段:#includeusingnamespacestd;classA{int*data;intsize;public:A(ints):size(s){data=newint[size];}A(){data=nullptr;}~A(){if(data)delete[]data;}};classB{Aa[2];public:B(){a[0]=A(10);a[1]=A(11);}};intmain(intargc,char*argv[]){Bb;}在上面的C++代码中,我有classA,它有一个array成员int*data,并且(解除)分配内存由(de)构造函数处理。我创建了

c++ - 默认初始化和值初始化结构的不同性能

我有一个带有数组的简单结构:structA{uint32_tarr[size];};我有两个函数,它们使用默认初始化和值初始化创建它:templatevoidtestDefault(){T*pa=newT;//Defaultuse(*pa);deletepa;}templatevoidtestValue(){T*pa=newT();//Valueuse(*pa);deletepa;}我面临着这些功能的不同性能。有趣的是,性能差异取决于我如何声明结构的默认构造函数。我有三种方法:structA{uint32_tarr[size];//Implicitconstructor};struct

c++ - C++ 默认初始化会将数组元素设置为其默认值吗?

考虑以下代码:#includeusingnamespacestd;intmain(){int*p=newint[2];for(inti=0;i我运行了好几次。它总是产生以下输出:00我可以假设C++默认初始化将数组元素设置为其默认值吗?在这种情况下,我可以假设p的元素值始终设置为0吗?我已阅读以下相关问题。但他们并没有具体针对我的情况:HowtoinitialisememorywithnewoperatorinC++?Operatornewinitializesmemorytozero 最佳答案 CanIassumethatC++d

c++ - 检索类内初始化成员的默认值

是否有任何方法可以直接检索使用类内初始化定义的成员的默认值?例如:structTest{intsomeValue=5;};intmain(intargc,char*argv[]){autoval=declvalue(Test::someValue);//Somethinglikethis;Shouldreturn5std::cout基本上是“复制”(类似于decltype)整个声明,包括默认值。有这样的东西吗? 最佳答案 如果您的类型是默认可构造的,您可以编写自己的declvalue:templateconstexprTdeclva

C++ 静态类成员未在 * 静态库中初始化 *

我目前正面临一个恼人的C++问题。其实,我什至不明白为什么我在过去的20年里没有面对它:(在我当前的上下文中,我们大量使用与我们的专有静态库静态链接的C++可执行文件(主要在Linux嵌入式系统中)。出于技术和优化原因,我们确实使用静态库。在过去的几年里,的确,我曾经创建过共享库...于是开始写一些静态类成员的类。例如:classInner{public:Inner(){std::cout非常基本的用例,不是吗?但在我的单元测试中,与lib链接,我无法在控制台中看到std::cout语句。然而,如果我将我的类Inner和A移动到可执行源代码中......它工作正常。我确信这是一个非常基

c++ - 各种初始化和构造之间的关系?

我问的是Typet{...};和Typet({...});和Typet={...};是等价的吗?如果一个有效,另一个也应该得到相同的结果?如果没有explicit修饰符,它们是等价的吗? 最佳答案 不,这三种形式都是不同的,并且在不同情况下可能独立地是良构或病构的。Here'sanexample第一种形式编译,但第二种和第三种形式不编译:classType{public:explicitType(int,int){}};intmain(){Typet1{1,2};//OkTypet2({1,2});//errorTypet3={1,

c++ - 如何在 C++11 中初始化未在其构造函数中初始化其所有成员的类

代码是这样的classC{public:intm1;intm2;C(intm);}C::C(intm):m1(m){};intmain(){C*c=newC(1);coutm2我想知道要初始化的值m2是什么。我认为c是值初始化的,而m2是默认初始化的。我用C++11和g++4.8.4测试,m2好像一直是0。我以为0是默认初始化,但默认初始化不是0。所以初始化为0就可以保证了? 最佳答案 c是copyinitialized,而不是值初始化。m2实际上是默认初始化的,是的,但这并不意味着它的值总是0(这将由值和聚合初始化保证)。int(

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++ - 根据模板参数生成不同大小的初始化列表

我有一个包含对象数组T的类,但没有默认构造函数。这是一个例子:#includestructParam{intx;};structA{A(constParam&p){std::coutstructArray{Tdata[n];/*ntimes*/Array(constParam&p):data{/*T(p),...,T(p)*/}{}};intmain(){Paramp{42};Arrayarr(p);return0;}我正在寻找一种方法来初始化data字段,该字段使用大小不一的元素T(p)初始化列表,其中正好包含n元素。感觉可以通过std::make_index_sequence这样的

c++ - 你能初始化 unique_ptr 的 "static const vectors"吗? (C++17 与 GCC 7.3)

我正在尝试创建一个staticconst默认对象(规则)的列表太大而不能经常复制,因此我想将它们存储在vector中的unique_ptr.我注意到类似的问题已经进行了几次,但我不清楚这是否真的可行(我倾向于不可行)。即你不能使用initializer_list与unique_ptr因为对成员的访问是const导致复制操作。您不能通过引用传递临时变量,从而导致复制操作。因此两者:staticconststd::vector>kStrings={std::unique_ptr(newstd::string("String1")),std::unique_ptr(newstd::strin