jjzjj

Construction

全部标签

c++ - 清空 C++ 对象

我经常向我的C++对象添加一个Empty方法,以使用类似于以下的代码清除内部状态。classFoo{private:intn_;std::stringstr_;public:Foo():n_(1234),str_("Hello,world!"){}voidEmpty(){*this=Foo();}};这似乎比在构造函数中复制代码要好,但我想知道*this=Foo()是否是清除对象时的常用方法?这个等着咬我的屁股有什么问题吗?有没有其他更好的方法来实现这种事情? 最佳答案 我会让构造函数调用我的函数:classFoo{private:

c++ - 构造函数的巨型 switch 语句

我有一个容器,其中包含一堆指向基类的指针,以及一个函数,该函数接受一些输入并返回一个类,该类是基类的子类。它返回哪个子类取决于输入。现在,我有一个像这样的巨大switch语句:classBase{...}classA:publicBase{...}classB:publicBase{...}...classZ:publicBase{...}Base*depends(intinput){switch(input){case1:returnnewA(...);case2:returnnewB(...);...case26:returnnewZ(...);default:...}}我想知道是

C++构造函数根据参数类型调用另一个构造函数

我有这门课classXXX{public:XXX(structyyy);XXX(std::string);private:structxxxdata;};第一个构造函数(使用结构)很容易实现。第二,我可以将一个字符串分成特定格式,进行解析,然后提取相同的结构。我的问题是,在java中我可以这样做:XXX::XXX(std::stringstr){structyyydata;//dostuffwithstringandextractdatathis(data);}使用this(params)调用另一个构造函数。在这种情况下,我可以做类似的事情吗?谢谢 最佳答案

c++ - 构造函数中的奇怪 "candidate expects 1 argument, 0 provided"

我正在用C++制作一个简单的线程服务器应用程序,事实上,我使用libconfig++来解析我的配置文件。好吧,libconfig不支持多线程,因此我使用两个包装类来完成“支持”。重点是,其中一个失败了:classapp_config{friendclassapp_config_lock;public:app_config(char*file):cfg(newlibconfig::Config()),mutex(newboost::mutex()){cfg->readFile(file);}private:boost::shared_ptrcfg;boost::shared_ptrmut

c++ - 返回值优化 : ho can I avoid copy construction of huge STL containers.

当我想要一个函数返回一个容器时:vectorfunc(){vectorresult;...returnresult;}按以下方式使用:vectorresult=func();为了避免复制我的容器的开销我经常编写函数,以便它只返回接受一个容器的非常量实例。voidfunc(vector&result){result.clear();...result;}按以下方式使用:vectorresult;func(result);难道我的努力没有意义,因为我可以确定编译器总是使用返回值优化? 最佳答案 没有意义。你提到的RVO类型称为命名RVO

c++ - 了解 std::string 的效率

我正在努力学习更多关于C++字符串的知识。考虑constchar*cstring="hello";std::stringstring(cstring);和std::stringstring("hello");假设在应用程序的.data部分存储“hello”,然后将字节复制到堆上的另一个区域,由std::string管理的指针可以访问它们,我是否正确?我怎样才能有效地存储一个非常非常长的字符串?我正在考虑一个从套接字流中读取数据的应用程序。我害怕连接很多次。我可以想象使用一个链表并遍历这个列表。字符串让我害怕太久了!任何链接、提示、解释和更多详细信息都将非常有帮助。

c++ - thread_local成员变量构造

我遇到了thread_local的一些奇怪行为,不确定是我做错了什么还是GCC错误。我有以下最小重现场景:#includeusingnamespacestd;structbar{structfoo{foo(){cerr输出上面的注释行如下所示:main0Ideone取消注释后,它变成了这样:mainfoofoo4242Ideone我是不是漏掉了什么蠢东西?$gcc-vUsingbuilt-inspecs.COLLECT_GCC=gccCOLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapperTarget:x86_6

c++ - 模板函数 : default construction without copy-constructing in C++

考虑structC{C(){printf("C::C()\n");}C(int){printf("C::C(int)\n");}C(constC&){printf("copy-constructed\n");}};还有一个模板函数templatevoidfoo(){//default-constructatemporaryvariableoftypeT//thisiswhatthequestionisabout.Tt1;//willbeuninitializedfore.g.int,float,...Tt2=T();//willcalldefaultconstructor,thenco

c++ - "Expected ' (' for function-style cast or type construction"错误是什么意思?

我收到错误“Expected'('forfunction-stylecastortypeconstruction”,我已尽力在线研究此错误的含义,但无法找到导致此错误的任何文档错误。我在StackOverflow上发现的所有相关问题都修复了特定的代码片段,并且没有更笼统地解释导致错误的原因。这些包括Expected'('forfunction-stylecastortypeconstruction答案突出了代码的几个问题。究竟是哪个问题导致了错误尚不清楚。c++Xcodeexpected'('forfunction-stylecastortypeconstruction在主函数中定义函

C++11 move 构造函数有副作用

在C++中,不能依赖从return语句调用的复制构造函数,因为标准中的一个特殊子句允许编译器忽略对由return语句产生的复制构造函数的调用,即使复制构造函数具有副作用。因此,编写一个除了复制构造实例之外还做其他事情的复制构造函数是一种糟糕的风格。C++11标准中是否有类似的语句允许编译器在某些情况下消除对move构造函数的调用-如果有,那是什么情况? 最佳答案 copy-elision同样适用于moveconstruction,是同一个子句,copyconstruction和moveconstruction的省略统称为“copy-