草庐IT

Initialization

全部标签

c++ - 初始化 C/C++ 多维数组时忽略大小

我对C/C++编译器的了解是,它们在初始化多维数组时会忽略内括号。所以,你不能这样做:intmyArray[][]={{2,3},{4,5},{4,1}};因为编译器会看到它完全一样intmyArray[][]={2,3,4,5,4,1};现在它不知道是6*1、3*2、2*3、1*6,还是别的什么(因为这可以是部分初始化列表,不一定完整)。我的问题是,为什么这在许多编译器中都有效?intmyArray[][2]={{2},{4,5},{4,1}};编译器“直观地”将其视为:intmyArray[][2]={{2,0},{4,5},{4,1}};这意味着它不会忽略大括号。到目前为止,我已

c++ - 显式复制构造函数和统一初始化

显式复制构造函数不允许Foofoo=bar;之类的东西,并将复制用法强制为Foofoo(bar);。此外,显式复制构造函数也不允许从函数中按值返回对象。但是,我尝试用大括号替换复制初始化,就像这样structFoo{Foo()=default;explicitFoo(constFoo&)=default;};intmain(){Foobar;Foofoo{bar};//errorhere}我得到了错误(g++5.2)error:nomatchingfunctionforcallto'Foo::Foo(Foo&)'或(clang++)error:excesselementsinstruc

c++ - 显式复制构造函数和统一初始化

显式复制构造函数不允许Foofoo=bar;之类的东西,并将复制用法强制为Foofoo(bar);。此外,显式复制构造函数也不允许从函数中按值返回对象。但是,我尝试用大括号替换复制初始化,就像这样structFoo{Foo()=default;explicitFoo(constFoo&)=default;};intmain(){Foobar;Foofoo{bar};//errorhere}我得到了错误(g++5.2)error:nomatchingfunctionforcallto'Foo::Foo(Foo&)'或(clang++)error:excesselementsinstruc

c++ - 初始化列表中的零初始化数组成员

我有一个包含数组成员的类,我想将其初始化为全零。classX{private:intm_array[10];};对于局部变量,有一种简单的零初始化方法(参见here):intmyArray[10]={};此外,类成员m_array显然需要初始化,因为默认初始化int只会留下随机垃圾,如here所述.但是,我可以看到对成员数组执行此操作的两种方法:带括号:public:X():m_array(){}带大括号:public:X():m_array{}{}都正确吗?两者在C++11中有什么区别吗? 最佳答案 使用()初始化任何成员会执行值

c++ - 初始化列表中的零初始化数组成员

我有一个包含数组成员的类,我想将其初始化为全零。classX{private:intm_array[10];};对于局部变量,有一种简单的零初始化方法(参见here):intmyArray[10]={};此外,类成员m_array显然需要初始化,因为默认初始化int只会留下随机垃圾,如here所述.但是,我可以看到对成员数组执行此操作的两种方法:带括号:public:X():m_array(){}带大括号:public:X():m_array{}{}都正确吗?两者在C++11中有什么区别吗? 最佳答案 使用()初始化任何成员会执行值

c++ - C++ 和 C 中的 union 初始化

我已经在定义为的头文件中构建了一个使用常量的工作C库typedefstructY{union{structbit_fieldbits;uint8_traw[4];}X;}CardInfo;staticconstCardInfoY_CONSTANT={.raw={0,0,0,0}};我知道.raw初始值设定项仅是C语法。如何定义带有union的常量,以便在C和C++中使用它们。 最佳答案 我遇到了同样的问题。对于C89,以下是正确的:WithC89-styleinitializers,structuremembersmustbeini

c++ - C++ 和 C 中的 union 初始化

我已经在定义为的头文件中构建了一个使用常量的工作C库typedefstructY{union{structbit_fieldbits;uint8_traw[4];}X;}CardInfo;staticconstCardInfoY_CONSTANT={.raw={0,0,0,0}};我知道.raw初始值设定项仅是C语法。如何定义带有union的常量,以便在C和C++中使用它们。 最佳答案 我遇到了同样的问题。对于C89,以下是正确的:WithC89-styleinitializers,structuremembersmustbeini

c++ - 等号对大括号初始化有影响吗?例如。 'T a = {}' 与 'T a{}'

在C++11中有两种初始化变量的方法:Ta{something};Ta={something};我在我能想到的所有场景中都测试了这两个,但我没有注意到其中的差异。Thisanswer表明两者之间存在细微差别:ForvariablesIdon'tpaymuchattentionbetweentheTt={init};orTt{init};styles,Ifindthedifferencetobeminorandwillatworstonlyresultinahelpfulcompilermessageaboutmisusinganexplicitconstructor.那么,这两者有什么

c++ - 等号对大括号初始化有影响吗?例如。 'T a = {}' 与 'T a{}'

在C++11中有两种初始化变量的方法:Ta{something};Ta={something};我在我能想到的所有场景中都测试了这两个,但我没有注意到其中的差异。Thisanswer表明两者之间存在细微差别:ForvariablesIdon'tpaymuchattentionbetweentheTt={init};orTt{init};styles,Ifindthedifferencetobeminorandwillatworstonlyresultinahelpfulcompilermessageaboutmisusinganexplicitconstructor.那么,这两者有什么

c++ - 为什么我们不能在声明时初始化类成员?

我想知道为什么我们不能在声明时初始化成员。classFoo{intBar=42;//thisisinvalid};相当于使用构造函数初始化列表。classFoo{intBar;public:Foo():Bar(42){}}我个人的理解是,上面的例子更具表现力和意图。此外,这是一个较短的语法。而且我认为不会与其他语言元素混淆。官方对此有澄清吗? 最佳答案 在C++11之前,不能像这样初始化非静态成员。如果您使用C++11编译器进行编译,它应该很乐意接受您提供的代码。我想首先不允许它的原因是因为数据成员声明不是定义。没有引入对象。如果您