草庐IT

copy-initialization

全部标签

c++ - std::make_unique(以及 emplace、emplace_back)对 initializer_list 参数的笨拙推导

假设我有这个结构:structposition{intx,y;};和另一个将this作为构造函数参数的类:classpositioned{public:positioned(positionp):pos(p){}private:positionpos;};我怎样才能得到简单的autobla=std::make_unique({1,2});上类?目前,编译器试图通过initializer_list匹配并调用make_unique的数组变体,这很愚蠢,因为positioned只有一个构造函数。emplace出现同样的问题和emplace_back功能。几乎所有将其可变模板参数转发给类的构造

c++ - 在派生类中使用基类 Copy CTOR

我知道有很多关于这个主题的帖子,但我找不到任何帖子来完全回答我的问题。假设我有一个基类和一个派生类,我为它实现了一个CCtor和一个赋值运算符,如下所示:classBase{char*name;....Base(constBase&other):name(nullptr){*this=other}voidoperator=(constBase&other){...Deepcopyofname}}classDerived:publicBase{....Derived(constDerived&other){*this=other;}voidoperator=(constDerived&o

c++ - std::initializer_list 和 c array [] 的优缺点是什么?

假设我有一些假设结构:structX{inti;doubled;}然后我可以写constexprXx_c_array[]{{5,6.3}};或constexprstd::initializer_listx_ilist{{5,6.3}};使用auto是不可能的-编译器必须知道内部类型。这两个版本都有缺点吗?更新:同样值得关注的是,您是否能够使用/将一种类型转换为另一种类型-例如。什么时候构建标准容器? 最佳答案 简单明了:initializer_list不是容器。它是对外部分配元素的不可变View。它完全不适合容器有用的任何场景——考

Docker Desktop 安装与无法运行(Docker Desktop failed to initialize)的诊断

1.DockerDesktop安装i.安装WSL首先要安装WSL,docker现在依赖于WSL才能在Windows上运行可以参照微软的官方教程https://docs.microsoft.com/en-us/windows/wsl/install注意WSL2是必须的,所以upgradeversion拿一本分不能跳过哈如果在安装WSL的过程中遇到了问题,可以参考我的另一篇文章https://blog.csdn.net/Antarctic_Bear/article/details/123489609ii.安装DockerDesktop理论上按照官方教程安装就可以了,第一次安装一般不会有什么问题的h

android - 我应该在哪里调用 MobileAds.initialize()?

我已阅读https://developers.google.com/admob/android/quick-start?hl=en-US#import_the_mobile_ads_sdk我需要使用代码A初始化MobileAds以显示AdMobAD。我有一些Activity需要展示广告,是否需要在所有Activity中添加代码A?还有,为什么即使我删除了AdMob广告也能正确显示MobileAds.initialize(this,"YOUR_ADMOB_APP_ID")代码Aimportcom.google.android.gms.ads.MobileAds;classMainActi

android - 我应该在哪里调用 MobileAds.initialize()?

我已阅读https://developers.google.com/admob/android/quick-start?hl=en-US#import_the_mobile_ads_sdk我需要使用代码A初始化MobileAds以显示AdMobAD。我有一些Activity需要展示广告,是否需要在所有Activity中添加代码A?还有,为什么即使我删除了AdMob广告也能正确显示MobileAds.initialize(this,"YOUR_ADMOB_APP_ID")代码Aimportcom.google.android.gms.ads.MobileAds;classMainActi

c++ - 关于 Copy-On-Write 和 shared_ptr 的困惑

我已经在网上搜索并通读了有关shared_ptr的Boost文档。SO上有一个响应,说写时复制(COW)的shared_ptr很糟糕,TR!已将其从字符串库中删除。大多数关于SO的建议都说使用shared_ptr而不是常规指针。该文档还讨论了使用std::unique()来制作COW指针,但我还没有找到任何示例。谈论的是拥有一个为您执行COW的智能指针,还是让您的对象对克隆对象使用新的shared_ptr然后修改克隆对象?示例:食谱和配料structNutrients;structIngredient{Ingredient(conststd::string&new_title=std:

C++为什么vector初始化会调用copy constructor

当你用下面的方式初始化一个vector时:std::vectorMyVec(10);它调用默认构造函数一次,然后再调用复制构造函数10次。所以,如果我没理解错的话,vector中的对象都是拷贝构造函数生成的。有人可以解释调用复制构造函数而不是默认构造函数的原因吗?或者甚至只是在没有对象的情况下分配内存? 最佳答案 它将分配没有对象的内存,除非您指定初始大小为10,因此它必须创建10个对象。如果你想要存储10个对象而不实际创建它们,你可以这样做:std::vectorMyVec;MyVec.reserve(10);如果你看一下你正在使

C++ : initialize static member large array

为了在C++中使用静态数据成员,我目前有类似的东西://HEADERFILE.hclassMyClass{private:staticdoublemyvariable;};//CPPFILE.cppdoubleMyClass::myvariable=0;但如果现在我有://HEADERFILE.hclassMyClass{private:staticdoublemyarray[1000];};如何初始化它?谢谢 最佳答案 和初始化普通数组一样:doubleMyClass::myarray[1000]={1.1,2.2,3.3};缺少

c++ - 错误 : cannot specify explicit initializer for array

我正在使用VisualStudios2013,但我一直收到此错误,但我不明白为什么。classCLI{stringcommands[2]={"create","login"};public:voidaddCommand(),start(),getCommand(string);};错误:errorC2536:'CLI::CLI::commands':cannotspecifyexplicitinitializerforarrays 最佳答案 VisualStudio2013并不完全符合C++11,因此,正如TobiasBrandt所