草庐IT

初始化OpenStack

全部标签

c++ - 如何使用常规构造函数模式初始化 C++ 11 标准容器?

是否可以将下面的长显式初始化列表替换为某个生成它的模板?std::arrayfoos={{{0,bar},{1,bar},{2,bar},{3,bar},{4,bar},{5,bar},{6,bar},{7,bar},}};现在这段代码之所以有效,是因为我们有constexprintn_foos=8。对于任意大的n_foos如何做到这一点? 最佳答案 以下解决方案使用C++14std::index_sequence和std::make_index_sequence(canbeeasilyimplementedinC++11progr

c++ - 是否可以对容器的容器使用大括号括起来的初始化列表?

我了解到,从C++11开始,我可以使用大括号括起来的初始化列表来初始化容器:std::mapm={{1,'a'},{3,'b'},{5,'c'},{7,'d'}};这也适用于容器的容器吗?例如,我试过以下没有成功:std::pair,int>a={{1,'c'},2};在VisualStudio2015中,我收到以下编译错误:noinstanceofconstructor"std::map::map[with_Kty=std::map,std::allocator>>,_Ty=int,_Pr=std::less,std::allocator>>>,_Alloc=std::allocat

c++ - 直接列表初始化编译成功,但是正常的直接初始化失败,为什么?

例如,代码如下:structA{A(int);};structB{B(A);};intmain(){Bb{{0}};//OKBc({0});//error}错误信息是:f.cc:Infunction'intmain()':f.cc:7:9:error:callofoverloaded'B()'isambiguousBc({0});//error^f.cc:7:9:note:candidatesare:f.cc:2:12:note:B::B(A)structB{B(A);};^f.cc:2:8:note:constexprB::B(constB&)structB{B(A);};^f.cc

java - 何时用 256 初始化数组

我在浏览破解编码面试书籍解决方案时注意到以下问题:实现一种算法以确定字符串是否具有所有唯一字符。如果不能使用额外的数据结构怎么办?这是提供的解决方案之一:publicstaticbooleanisUniqueChars2(Stringstr){boolean[]char_set=newboolean[256];for(inti=0;i为什么char_set数组初始化为256?我在想这是因为有128个ascii字符,但我不确定。此外,这个解决方案似乎是用Java编写的,但如果用C++完成,是否还需要初始大小? 最佳答案 Iwasthi

c++ - 初始化对象时丢弃placement new返回值是否可以

这个问题来自this中的评论部分线程,并且在那里也得到了答案。但是,我认为它太重要了,不能只留在评论部分。所以我为此做了这个问答。Placementnew可用于在分配的存储空间中初始化对象,例如,usingvec_t=std::vector;autop=(vec_t*)operatornew(sizeof(vec_t));new(p)vec_t{1,2,3};//initializeavec_tatp根据cppref,PlacementnewIfplacement_paramsareprovided,theyarepassedtotheallocationfunctionasaddit

带有 char 数组的 C++ 结构以不寻常的方式初始化为零

遇到一段不常见的c++初始化代码,似乎可以很好地处理以下...structsfoobar{charbar[10];charfoo[10];};...sfoobarx{0};这是将这些字符数组初始化为零的可接受方法吗? 最佳答案 这在C++中有效。作为效果sfoobarx{0};会将x.bar和x.foo的所有元素初始化为0.根据aggregateinitialization的规则,嵌套初始化列表的大括号可以省略,thebracesaroundthenestedinitializerlistsmaybeelided(omitted),

c++ - 初始化原子指针是原子的吗?如果初始化或内存分配抛出会发生什么?

如果我一次性声明并定义一个原子指针,比如-std::atomiciptr=newint(1);std::atomiciptr=newT();据我了解,整个操作不是原子的。newT()涉及分配内存,构造T对象,然后自动分配给iptr。T可能很容易构造,在这种情况下,构造T不应抛出异常,但某些用户定义的T可能会抛出异常。如果在T构造或内存分配之间某个其他线程使用iptr怎么办?这个操作真的是原子的吗?使其成为原子的一种方法是打破声明和定义,例如T*temp=newT();std::atomiciptr=temp;有没有其他方法可以原子地做同样的事情?我的理解有问题吗?

c++ - 从相同类型的静态成员进行类内初始化

下面的代码是否有效,例如不会带来未定义的行为?structS{inti=s.i;staticSs;};SS::s;intmain(){Sa;//a.i=0S::s.i=42;Sb;//b.i=42}据我所知,所有具有静态存储持续时间的变量都是零初始化的。因此s.i在S::s创建时是0,一切都很好。但也许我遗漏了什么。 最佳答案 我认为它定义明确。[class.static.data]/6Staticdatamembersareinitializedanddestroyedexactlylikenon-localvariables.[

c++ - 这两个 C++ 初始化器语法在语义上是否有所不同?

假设以下代码是可以正确编译的合法代码,T是类型名,x是变量名。语法一:Ta(x);语法二:Ta=x;这两个表达式的确切语义是否不同?如果是,在什么情况下?如果这两个表达式确实具有不同的语义,我也很好奇标准的哪一部分讨论了这一点。此外,如果T是标量类型的名称(也称为int、long、double,等等...),当T是标量类型与非标量类型时有什么区别? 最佳答案 是的。如果x的类型不是T,则第二个示例扩展为Ta=T(x)。这要求T(Tconst&)是公开的。第一个示例不调用复制构造函数。在检查了可访问性之后,就可以删除拷贝(正如Tony

C++ 初始化全局数组

大家好。我是一名经验丰富的Java程序员,正在学习C++。现在我有一点初学者的问题。我有一个int类型的数组变量x。用户会在方法B中输入x的大小,我想在方法A中使用x。voidmethodA(){usingintx[]blahblahblah}voidmethodB(){intn;cin>>n;intx[n];//HowcanIusethisintxinmethodAwithoutgettingerror:storagesizexisunknown.//Ortheerror'x'wasnotdeclaredinthisscope.}编辑:参数传递不是我正在寻找的解决方案。双重编辑:我确