草庐IT

default-initialization

全部标签

c++ - 谷歌模拟 : "no appropriate default constructor available"?

将VisualStudio2010C++与googlemock结合使用。我正在尝试使用我创建的模拟,但在线上遇到编译器错误:EmployeeFakeemployeeStub;错误是:1>c:\someclasstests.cpp(22):errorC2512:'MyNamespace::EmployeeFake':noappropriatedefaultconstructoravailable假员工:classEmployeeFake:publicEmployee{public:MOCK_CONST_METHOD0(GetSalary,double());}员工:classEmploy

c++ - 何时使用 =default 与 =delete

据我了解,这些语义仅用于复制构造函数、移动构造函数、复制赋值、移动赋值和析构函数。使用=delete用于禁止使用其中一项功能,即=default如果您想向编译器明确说明在何处使用这些函数的默认值,则使用它。在制作类(class)时使用这些关键字的最佳做法是什么?或者更确切地说,在开发类(class)时我如何记住这些?例如,如果我不知道我是否会使用这些功能之一,最好用delete禁止它。或允许并使用default? 最佳答案 好问题。同样重要的是:哪里使用=default和=delete.我对此有一些有争议的建议。它与我们所有人(包括

c++ - 我们什么时候应该使用圆括号 ( ) 与 initializer { } 语法来初始化 C++11 中的对象?

这个问题在这里已经有了答案:Whentousethebrace-enclosedinitializer?(3个答案)关闭6年前。已更新我已经通过链接(例如Whentousethebrace-enclosedinitializer?)了解何时应该使用{}大括号初始化,但没有给出何时应该使用括号()的信息与初始值设定项{}在C++11/14中初始化对象的语法?建议使用哪些标准做法()在{}?在极少数情况下,例如vectorv(10,20);或autov=vector(10,20);,结果是std::vector有10个元素。如果我们使用大括号,结果是std::vector有2个元素。但这取

c++ - "= default"是否允许离线实现?

通常我会在header中看到=default语法。我的理解是,这与函数在header中明确实现是一样的,请参见下面的Foo。Foo.h#pragmaonceclassFoo{public:Foo()=default;Foo(constFoo&other)=default;};纯粹出于好奇,=default可以在源文件中使用如下吗?栏.h#pragmaonceclassBar{public:Bar();Bar(constBar&other);};酒吧.cpp#include"Bar.h"Bar::Bar()=default;Bar::Bar(constBar&)=default;据我所知

c++ - 解决 "only static const integral data members can be initialized within a class"编译错误

以下创建全局对象会导致编译错误。#include"stdafx.h"#includeusingnamespaceSystem;usingnamespacestd;#pragmahdrstopclassTester;voidinput();classTester{staticintnumber=5;public:Tester(){};~Tester(){};voidsetNumber(intnewNumber){number=newNumber;}intgetNumber(){returnnumber;}}TestertesterObject;voidmain(void){cout>ne

c++ - std::unique_ptr 删除函数,initializer_list - 驱动分配

全部,当我使用初始化列表格式实例化小部件数组时,指向成员变量小部件实例的裸指针可以编译,但在更改为std::unique_ptr后,gcc会给出有关已删除函数的编译错误。$uname-aLinux..3.5.0-21-generic#32-UbuntuSMP2012年12月11日星期二18:51:59UTCx86_64x86_64x86_64GNU/Linux$g++--versiong++(Ubuntu/Linaro4.7.2-5ubuntu1)4.7.2此代码给出以下编译器错误:#include#includeclassWidget{public:Widget(){}};class

c++ - std::initializer_list 的底层结构是什么?

第一部分:std::initializer_list是C++11的一个非常有用的特性,所以我想知道它是如何在标准库中实现的。从我读到的here,编译器创建一个T类型的数组并给出指向initializer_list的指针.它还声明复制initializer_list将创建一个引用相同数据的新对象:为什么会这样?我会猜到它要么:为新的initializer_list复制数据将数据的所有权转移到新的initializer_list第二部分:来自std::vector的众多在线引用资料之一构造函数:vector(initializer_listil,constallocator_type&al

c++ - 为什么 =default on operator= 在有 const 成员时编译?

classFoo{public:Foo&operator=(constFoo&)=default;private:constinti=0;};为什么=default在那里被允许?它编译没有错误。我认为=default应该失败,因为它不可能分配给const变量?到底发生了什么? 最佳答案 当无法生成该函数时(就是这种情况),=default会将其生成为=deleted。如果您尝试使用该赋值运算符,您的编译器应该produceanerror. 关于c++-为什么=defaultonopera

鸿蒙开发解决hvigor ERROR: Failed :entry:default@ProcessLibs...

文章目录项目场景:问题描述原因分析:建议的解决方案总结HarmonyOSArkTS项目场景:项目无法在真机上运行。报错hvigorERROR:Failed:entry:default@ProcessLibs…hvigorERROR:2filefoundin‘lib/arm64-v8a/libagccrypto.so’.Thismaycauseunexpectederrorsatruntime.问题描述报错问题如下:hvigorERROR:Failed:entry:default@ProcessLibs…hvigorERROR:2filefoundin‘lib/arm64-v8a/libagcc

c++ - 开关盒 : declaration-with-initialization & declaration-and-then-assignment

在switch-case语句中,declaration-with-initialization是无效的,但允许declaration-and-then-assignment。如以下代码片段所示。从编译器端看,这两种类型的初始化有什么区别?以及为什么第一种初始化无效而第二种初始化有效。switch(val){case0:intnewVal=42;//Invalidbreak;case1:intnewVal2;//ValidnewVal2=42;break;case2:break;} 最佳答案 实际上,规则是您不能跳入经过具有初始化的声