草庐IT

初始化OpenStack

全部标签

c++ - 初始化列表作为 operator[] 的参数

这个问题与讨论的问题有关here.我尝试使用初始化列表来创建要传递给operator[]的参数。#include#includestructA{std::string&operator[](std::vectorvec){returnvec.front();}};intmain(){//okstd::vectorvec{"hello","world","test"};Aa;//error:couldnotconvert'{"hello","world","test"}'to'std::vector...'a[{"hello","world","test"}];}我的编译器(GCC4.6

c++ - {1, 2} 是一个值吗?如果是,它的类型是什么?如果不是,为什么可以将其分配给初始化列表?

#includeusingnamespacestd;templatevoidf(initializer_list){}intmain(){typeid(1);//OKtypeid(int);//OKtypeid(decltype(1));//OKf({1,2});//OKtypeid({1,2});//errordecltype({1,2})v;//errortypeid(decltype({1,2}));//error}{1,2}是一个值吗?如果是,为什么是typeid({1,2});不合法?如果不是,为什么可以赋值给一个initializer_list对象?

c++ - 将 gcc 构建的 Boost 链接到英特尔 C++ 编译程序时静态初始化期间的段错误

我有一个Ubuntu13.04系统,安装了最新的SVN版本的BoostC++库。Boost安装是使用系统的nativegcc版本v4.7.3构建的。我非常广泛地使用Boost,当我使用gcc编译时它工作得很好;我已经使用了其中的许多,包括Boost.Thread(我将在下面详细讨论),没有任何问题。如果我尝试使用与已安装的Boost库链接的英特尔C++编译器(我个人使用v13.x系列中的几个不同版本)构建程序,就会出现问题。当我这样做时,程序启动后立即出现段错误;它似乎发生在Boost.Thread库的静态初始化期间。这是一个简单的示例程序:#include#includeintmai

c++ - MSVC 静态常量模板成员初始化失败

在使用MSVC编译器时,在模板类上初始化静态常量变量时​​遇到问题。我试过MSVC2013、MSVC2012和MSVC2010。此代码适用于MinGW、MinGW-w64、GCC和Clang。#include#includeusingnamespacestd;templatestructStringHolder{staticconststd::stringstr;};templateconststringStringHolder::str{"integer"};intmain(){//printsnothingwhencompiledwithMSVC2013,workswithMinG

使用默认默认构造函数的 C++11 值初始化

在下面的例子中:#includestructA{intz;A(std::string){}A()=default;};intmain(){charbuf[1000];std::fill(buf,buf+1000,'x');autoa=new(buf)A{};std::cerrz使用GCC4.8编译outputszero(与Clang3.4的行为相同)。这似乎表明a在调用默认构造函数之前被零初始化。但根据value-initializationrulesoncppreference.com,对象不应在默认构造函数调用之前初始化。A类符合C++11下的要点#1:1)IfTisaclasst

c++ - 为什么未初始化的 constexpr 变量不是常量?

我不确定这是编译器错误还是我误解了constexpr:structS{};constexprSs1{};constexprSs2;structtest{staticconstexprautot1=s1;staticconstexprautot2=s2;//errorhere};GCC4.8给我一个奇怪的错误“错误:字段初始值设定项不是常量”。s2真的不是常数吗?如果是,为什么?为了清楚起见,我实际上在我的代码中使用了一堆空结构(用于元编程https://github.com/porkybrain/Kvasir)所以我真的对这个特定示例很感兴趣。 最佳答案

c++ - 在模板中初始化静态成员

这是一个最小的例子:#includestructB{B(){x=42;}staticintx;};intB::x;templatestructA{intfoo(){returnb.x;}staticBb;};templateBA::b;//templatestructA;//explicitinstantiationwithN=2(!)intmain(intargc,char**argv){std::cout().foo()此程序使用g++4.9.2写入42,但使用VisualStudio2015RC写入0。另外,如果我取消显式实例化的注释,VS2015RC也会给出42,这很有趣,因为

c++ - 了解对象初始化

我在初始化数组时不小心忘了写大括号:structA{A(){std::coutDEMO输出:A(2)A(2)A(2)A(3)据我所知,这是正确的。N4257::12.6.1/2:Bracescanbeelidedintheinitializer-listforanyaggregate,eveniftheaggregatehasmembersofaclasstypewithuser-definedtypeconversions但是支撑初始化有不同的副作用:structA{A(){std::coutDEMO输出:A(2)A(3)A()您不能解释一下这种差异吗?

c++ - 如何初始化 Protocol Buffer 中的重复元素?

假设我有这条消息。messageA{repeatedfloatw=1[packed=true];}如何在我的代码中初始化w?我还能做得更好吗?a=A()for(inti=0;i 最佳答案 a.w()或a.mutable_w()将返回google::protobuf::RepeatedField它提供了一些额外的选项。例如,您可以调用a.mutable_w()->Reserve(n)提前预分配空间,以避免每次大小加倍时重新分配的通常策略。您也可以使用Resize(n)其次是mutable_data()直接访问底层缓冲区,但这可能不会比

c++ - 零初始化、静态初始化和值初始化有何不同?

BenVoigt已指出here那:Zeroinitializationisoneofthestepsofstaticinitialization.Butyou'rerightthatyoucan'tblindlysubstitutethelatter(tag),sincezeroinitializationisalsoperformedforvalueinitialization.However,there'snoneedfor(atagnamed)zero-initializationinthecontextofC++,becausetagsalreadyexistforbothst