草庐IT

初始化OpenStack

全部标签

c++ - 复制初始化: why move or copy constructor was not called even if copy-elision is turned off?

我的问题不同,因为我可能“知道”复制省略。我正在学习复制初始化。但是,以下代码让我感到困惑,因为我已经使用-fno-elide-contructors-O0选项关闭了复制省略。#includeusingnamespacestd;classtest{public:test(inta_,intb_):a{a_},b{b_}{}test(consttest&other){cout我首先使用命令构建:g++-std=c++11-fno-elide-constructors-O0main.cpp-omain得到如下结果:**showelideconstructors**moveconstruct

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

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

c++ - 带谓词的 std::map 与初始化列表

我有一个std::map使用自定义谓词:structPredIgnoreCase{booloperator()(conststd::string&str1,conststd::string&str2)const{std::stringstr1NoCase(str1),str2NoCase(str2);std::transform(str1.begin(),str1.end(),str1NoCase.begin(),tolower);std::transform(str2.begin(),str2.end(),str2NoCase.begin(),tolower);return(str1

c++ - 数据成员线程和互斥体的初始化。错误的顺序是否有未定义的行为?

我偶然发现了一种我认为是在不知不觉中搬起石头砸自己脚的非常简单的方法。先介绍一下数据成员的初始化顺序就是数据成员声明的顺序。所以这是非法的:structA{std::size_ti_;std::size_tlength_;A(std::size_tlength):i_{length_}//UBhere.`length_`isuninitializedlength_{length}{}};因为数据成员length_在i_的初始化器中使用时是未初始化的。幸运的是,gcc和clang都对此给出了很好的警告。简单的解决方案是从参数初始化每个数据成员,即i_{length}。现在进入正题但是当它

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

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

c++ - 具有类成员的结构的静态初始化

我有一个用大量普通char*指针定义的结构,还有一个对象成员。当我尝试静态初始化这样的结构时,出现编译器错误。typedefstruct{constchar*pszA;//...snip...constchar*pszZ;SomeObjectobj;}example_struct;//Ionlywanttoassignthefirstfewmembers,therestshouldbedefaultexample_structex={"a","b"};SomeObject有一个没有参数的公共(public)默认构造函数,所以我认为这不是问题。但是当我尝试编译它(使用VS)时,出现以下错

c++ - 静态字段初始化的模板部分特化

我正在尝试以下操作:structMyType{};templatestructTest{staticconstMyType*constsm_object;};templatestructTest{staticconstMyType*constsm_object;};templateconstMyType*constTest::sm_object=newMyType();templateconstMyType*constTest::sm_object=newMyType();我将其包含在2个文件中-a.cpp和b.cpp。我尝试编译并得到:errorC2998:'constMyType*

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)成员的类(class)std::setmSegments和以下方法:std::pairgetSegments(){returnboost::tie(mSegments.begin(),mSegments.end());}我收到以下错误:invalidinitializationofnon-constreferenceoftypestd::_Rb_tree_const_iterator&fromatemporaryoftypestd::_Rb_tree_const_iterator我不确定如何解决这个问题。谁能告诉我问题出在哪里?

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