首先,我想说,根据cppreference.com,对枚举进行值初始化有点不可能。根据http://en.cppreference.com/w/cpp/language/value_initialization,值初始化枚举实际上执行零初始化。然后,根据http://en.cppreference.com/w/cpp/language/zero_initialization,对枚举进行零初始化的效果是:IfTisascalartype,theobject'sinitialvalueistheintegralconstantzeroimplicitlyconvertedtoT.但是,整数
当我使用初始化列表时:structStruct{Struct():memberVariable(){}intmemberVariable;};原始类型(int、bool、float、enum、指针)成员变量为默认初始化。它获得实现的值是定义的还是所有实现都相同? 最佳答案 你说的不对。该对象不是默认初始化的,而是值初始化的。而且它的值(value)是明确的int=0,bool=false,float=0.0f,enum=(enumtype)0,pointer=nullpointerpointertomember=nullmember
当我使用初始化列表时:structStruct{Struct():memberVariable(){}intmemberVariable;};原始类型(int、bool、float、enum、指针)成员变量为默认初始化。它获得实现的值是定义的还是所有实现都相同? 最佳答案 你说的不对。该对象不是默认初始化的,而是值初始化的。而且它的值(value)是明确的int=0,bool=false,float=0.0f,enum=(enumtype)0,pointer=nullpointerpointertomember=nullmember
我想声明一个二维数组并为其赋值,而不运行for循环。我认为我可以使用以下想法intarray[5]={1,2,3,4,5};这也可以很好地初始化二维数组。但显然我的编译器不喜欢这样。/*1812202559132426*/#includeintmain(){intarr[2][5]={0};//Thisactuallyinitializeseverythingto0.arr[1][]={1,8,12,20,25};//Line11arr[2][]={5,9,13,24,26};return0;}J:\CPP\Grid>bcc32.exeGrid.cppBorlandC++5.5.1fo
我想声明一个二维数组并为其赋值,而不运行for循环。我认为我可以使用以下想法intarray[5]={1,2,3,4,5};这也可以很好地初始化二维数组。但显然我的编译器不喜欢这样。/*1812202559132426*/#includeintmain(){intarr[2][5]={0};//Thisactuallyinitializeseverythingto0.arr[1][]={1,8,12,20,25};//Line11arr[2][]={5,9,13,24,26};return0;}J:\CPP\Grid>bcc32.exeGrid.cppBorlandC++5.5.1fo
对于静态成员初始化,我使用嵌套的帮助器结构,它适用于非模板化类。但是,如果封闭类由模板参数化,则如果在主代码中未访问辅助对象,则不会实例化嵌套的初始化类。为了说明,一个简化的例子(在我的例子中,我需要初始化一个vector)。#include#includestructA{structInitHelper{InitHelper(){A::mA="Hello,I'mA.";}};staticstd::stringmA;staticInitHelpermInit;staticconststd::string&getA(){returnmA;}};std::stringA::mA;A::In
对于静态成员初始化,我使用嵌套的帮助器结构,它适用于非模板化类。但是,如果封闭类由模板参数化,则如果在主代码中未访问辅助对象,则不会实例化嵌套的初始化类。为了说明,一个简化的例子(在我的例子中,我需要初始化一个vector)。#include#includestructA{structInitHelper{InitHelper(){A::mA="Hello,I'mA.";}};staticstd::stringmA;staticInitHelpermInit;staticconststd::string&getA(){returnmA;}};std::stringA::mA;A::In
可能想要声明一个带有参数的函数,并指定参数的默认值是该类型的默认构造函数的结果:voidfoo(a::really::long::type::namearg=a::really::long::type::name());有没有更好的语法不涉及两次输入类型名称?比如:voidfoo(a::really::long::type::namearg=default);我意识到我可以typedef类型名称使其更漂亮,但我很好奇是否存在这样的语法。 最佳答案 是的:voidfoo(a::really::long::type::namearg={
可能想要声明一个带有参数的函数,并指定参数的默认值是该类型的默认构造函数的结果:voidfoo(a::really::long::type::namearg=a::really::long::type::name());有没有更好的语法不涉及两次输入类型名称?比如:voidfoo(a::really::long::type::namearg=default);我意识到我可以typedef类型名称使其更漂亮,但我很好奇是否存在这样的语法。 最佳答案 是的:voidfoo(a::really::long::type::namearg={
下面是一段代码片段,可以在vs2015中编译运行而不会出错#includeusingnamespacestd;classA{public:A(intb):k(b){}//secondtimeconstintk=666;//firsttime};intmain(){Aa(555);cout输出为555。但据我所知,const对象应该只初始化一次,之后该值是不可修改的。 最佳答案 它没有被初始化两次;defaultmemberinitializer只是被忽略了。所以对于Aa(555);,a.k被初始化为555。Ifamemberhasa