草庐IT

Initialization

全部标签

C++ 2011 : good syntax to initialize an array in a constructor?

这里我有一个示例类:templateclassMyClass{public:MyClass();~MyClass();protected:T_data[SIZE];};templateMyClass::MyClass()://_data()OR_data({})OR_data{}OR...{;}在默认构造函数中将整个数组初始化为0的正确C++2011语法是什么?非常感谢。 最佳答案 统一初始化语法运行良好:MyClass():_data{}{} 关于C++2011:goodsyntaxt

c++ - g++ (4.7.2) 错误或功能,在编译时初始化静态数组时?

好的,所以我试图通过在编译时初始化一堆constexprstaticintconst数组来做一些聪明的事情。尽管运行时性能完全不受初始化这些数组的控制,但这似乎是一个有趣的小练习。我写了一个测试设置看看是否可行,我最终能够做到这一点:structTest{constexprstaticintconstarray[10]=Array::array;};constexprintconstTest::array[10];intmain(){cout这里,Array有一个名为array的静态成员,它包含10个int,从0开始,其中每个后续元素的值由名为Increment(即{0,1,...,9

c++ - 用文字初始化引用成员变量

在下面的代码中,我用文字初始化了一个引用变量。classABC{public:constint&a;ABC():a(43){}voidnewfoo(){printf("NEWFOO%d",a);}};intmain(){ABCobj;obj.newfoo();}这个程序的输出是NEWFOO32767,当我知道下面的代码可以正常工作时,这似乎不合逻辑。intmain(){constint&b=3;printf("%d",b);}这里发生了什么?如果编译器在初始化引用变量期间声明了一些临时变量,那么该变量的范围是否会在main内部,因为该类在全局范围内? 最佳答

c++ - 警告 : array 'alphabet' initialized by parenthesized string literal

在模板函数中,我目前有以下行:staticconstunsignedcharalphabet[17]=(Uppercase)?("0123456789ABCDEF"):("0123456789abcdef");其中Uppercase是模板参数。使用-pedanticgcc告诉我:warning:array'alphabet'initializedbyparenthesizedstringliteral'("0123456789abcdef")'如何摆脱该消息(我希望alphabet位于堆栈中)? 最佳答案 使代码明确有效的最简单方法

c++ - 在带有初始化的声明中,我可以使用对未初始化数据的引用吗?

我有一个创建并返回对象的函数。它也有副作用,将成功标志写入bool变量:structMyObject{...intfield1;charfield2;boolfield3;};MyObjectCreateMyObject(bool&success){...}纯属巧合,我必须将成功标志存储在我的对象中。所以我可以用这种显而易见的方式来写它:boolsuccess;MyObjectx=CreateMyObject(success);x.field3=success;或者这样:MyObjectx=CreateMyObject(x.field3);第二种方式是否涉及未定义的行为,从多个赋值到f

c++ - 从子类初始化 protected 静态成员

我想知道是否可以从子类中初始化一个protected静态成员。例如,//headfileclassTest{protected:staticinti;};classTest2:publicTest{};//cppfile#include"headfile.h"intTest2::i=1;如您所见,当我初始化这个静态成员(i)时,我使用了子类名称(Test2)。令我惊讶的是,我用visualstudio2013测试了这段代码,它没有出错。但是如果我在Linux下使用Netbeans(gcc11)尝试它,我得到一个提示错误:无法解析标识符i然后我编译了一下,报错信息是:错误:ISOC++不

c++ - 如何在C++中初始化成员的构造函数参数

我有以下代码(头文件):classInnerClass{InnerClass(intvar);}classBigClass{BigClass();InnerClassmember(5);}如何将BigClass中的member参数初始化为5(上面的代码会产生错误,您可能已经猜到了)?如果我将InnerClassmember(5)行放在代码(而不是头文件)文件中,那么没问题。 最佳答案 您可以通过in-classbrace-or-equalinitializer初始化成员变量BigClass::member(自c++11起):Inne

c++ - 结构化绑定(bind)的标识符是否按顺序初始化?

很难从proposal中推断出.C++17结构化绑定(bind)会从左到右初始化它们的标识符吗?这是否保证打印“first”、“second”、“third”?#includestructA{A(){std::cout 最佳答案 结构化绑定(bind)不会复制值;它引用它们。在您的示例中,a不是返回值第一个成员的拷贝;这是对它的引用。由于您正在初始化引用而不是值,因此无法通过查看构造函数调用的顺序来检测初始化顺序。对于具有公共(public)成员的结构,获取这些引用的顺序无关紧要,因为您无法干扰该过程。对于实现结构化绑定(bind)

c++ - 不稳定的行为

我是C++的新手。小代码示例如下:intmain(intargc,char*argv[]){charch1;intint1;cin>>ch1;cin>>int1;cout当我运行程序并输入以下内容时:az我得到的输出是:a32767我理解“a”,但为什么整数值是32767?我只是想测试看看如果我使用“z”而不是分配给int1的数值会发生什么。我尝试输入:ax...我也得到了相同的结果。现在如果我使用shortint1而不是intint1并使用输入运行程序:az我得到输出:a0附言sizeof(int)=4sizeof(short)=2我使用的是64位机器。

c++ - 在 C++11 中哪些临时对象不能用 `someType()` 初始化?

我有一些对类型和初始值进行操作的宏。我需要将初始值vIni转换为vType(vIni总是可转换为vType,有时它有同一类型)。vIni也可能为空,在这种情况下,vType应该未初始化或默认初始化。结果传递给模板化函数。简而言之,templatevoidfoo(constT&o);foo(vType(vIni));foo(vType());必须编译。我已经发现foo(unsignedint())或foo(int*())无法编译,但可以使用typedef解决。还有哪些其他情况(除了带有空格和指针的内置类型)会失败? 最佳答案 简短(稍