草庐IT

Initialization

全部标签

c++ - 用空花括号初始化

第一次尝试,一切正常:classBase{public:Base(){std::cout另一种实现方式(添加explicit):classBase{public:explicitBase(){std::cout我在cppreference上读到,在这两种情况下都将使用默认初始化并且没有区别。从列表初始化:Otherwise,Ifthebraced-init-listisemptyandTisaclasstypewithadefaultconstructor,value-initializationisperformed.从值初始化:ifTisaclasstypewithnodefaul

c++ - 错误 : no matching function for call to . .. 在返回语句

我在openSUSELeap15上的Qt5.9.4上使用GCC7。我有以下类(class):classManSuppProps:publicQObject{Q_OBJECTpublic:explicitManSuppProps(QStringparentName);explicitManSuppProps(){}explicitManSuppProps(constManSuppProps&manSuppProps);explicitManSuppProps(ManSuppProps&manSuppProps);~ManSuppProps();private:QVector3Dm_sup

c++ - 在模板类中初始化类型为 'T &' 的静态成员的正确方法是什么?

我正在玩弄一个渴望初始化的通用单例类。这个想法是你像这样从类中公开继承:classfoo:publicsingleton{};我在这个过程中学到了很多东西,但我现在卡住了,因为它破坏了我的VisualStudio2008链接器。问题在于静态实例成员和/或其初始化。templateclasssingleton{singleton();singleton(singletonconst&);singleton&operator=(singletonconst&);public:staticT&instance;};templateT&T::instance;任何见解将不胜感激!编辑:有了这个

C++:静态初始化一个数组成员,一次成员

我现在可以在全局范围内执行此操作并且一切正常:constchar*Foo::bars[3]={"a","b","c"};但我想这样做是因为这样更清晰和self记录(特别是如果您使用枚举作为索引):constchar*Foo::bars[3];bars[0]="a";bars[1]="b";bars[2]="c";有可能吗?我知道我可以在一个函数(例如,类的构造函数)中执行此操作,但是如果在程序开始时未调用构造函数并且我想使用静态数组怎么办?这会导致问题。 最佳答案 这个怎么样?constchar*Foo::bars[3]={/*In

c++ - 使用私有(private)复制/移动构造函数进行聚合初始化

我在为anotherquestion测试一些东西时遇到了这个问题关于初始化聚合。我正在使用GCC4.6。当我用列表初始化聚合时,所有成员都在适当的位置构建,无需复制或移动。即:intmain(){std::array,2>a{std::array{Goo{1,2},Goo{3,4}},std::array{Goo{-1,-2},Goo{-3,-4}}};}让我们通过一些嘈杂的构造函数来确认:structGoo{Goo(int,int){}Goo(Goo&&){std::cout运行时,不会打印任何消息。但是,如果我将移动构造函数设为私有(private),编译器会提示'Goo::Goo

c++ - "MyClass mc = MyClass()"还是 "MyClass mc"?

有什么区别MyClassmc=MyClass();和MyClassmc;在C++中? 最佳答案 第一个调用复制构造函数,以临时对象作为参数-MyClass()创建临时对象。第二个调用默认构造函数。实际上,在大多数情况下,它们针对相同的代码进行了优化,但这就是语义上的差异。如Negal所述,POD类型的情况略有不同;当“MyClass”是POD时,第二个片段不会对mc进行值初始化,而第一个片段会。 关于c++-"MyClassmc=MyClass()"还是"MyClassmc"?,我们在S

c++ - 是否允许在类构造函数之外初始化非静态成员?

我刚刚看到一个问题,在类定义中初始化了一个类的非静态成员。但是如果我尝试编译以下代码,我会从编译器中得到一个错误。classMyClass{intn=2;};我得到的错误是:g++-onsnonstatic.cpp-Wall-Wextra-pedanticnonstatic.cpp:3:13:error:ISOC++forbidsinitializationofmember‘n’[-fpermissive]nonstatic.cpp:3:13:error:making‘n’static[-fpermissive]nonstatic.cpp:3:13:error:ISOC++forbid

c++ - 在 CUDA 中初始化 dim3 变量, "dim3 dimGrid(numBlocks);"语法如何工作?

我正在学习CUDA,在大量示例代码中我看到block和网格维度设置如下:dim3dimGrid(numBlocks);dim3dimBlock(numThreadsPerBlock);exampleKernel>>(input);我知道像dim3dimGrid(numBlocks);这样的行正在初始化dimGrid,一个dim3类型的变量,将numBlocks作为它的x值-但我'我不确定这是如何工作的。我只是假设它是普通的C++语法,但对于C++,我认为该行必须这样写:dim3dimGrid=dim3(numBlocks);否则你会得到“最令人烦恼的解析”。所以我假设将这些行解释为变量

c++ - 在大括号初始化结束时与额外的 ","有什么关系吗?

除了明显的名称之外,以下两个声明之间是否有区别:intmain(){charstr1[17]={'H','e','l','l','o'};charstr2[17]={'H','e','l','l','o',};}第二个多出来的','是怎么回事?这有什么意义吗?两者似乎都编译得很好,在这种情况下,它们似乎根据strcmp生成相同的字符串,这至少是我所期望的,因为数组的其余部分填充了零。 最佳答案 尾随的逗号不是大括号初始化特有的,在编程语言中普遍存在(JSON数据格式是异常值)。除了便于机器生成之外,您从尾随逗号中获得的一个(小)好处

c++ - 是否定义了静态初始化实现的顺序?

动态初始化可以是有序的也可以是无序的:Dynamicinitializationofanon-localvariablewithstaticstoragedurationiseitherorderedorunordered.这并没有说明静态初始化的顺序。静态初始化的顺序是实现定义的吗? 最佳答案 静态初始化不意味着“初始化具有静态存储持续时间的变量”。这是一个更为有限的术语,在§3.6.2[basic.start.init]/p2中定义。Together,zero-initializationandconstantinitializ