草庐IT

copy-constructor

全部标签

c++ - 构造函数或赋值运算符

你能帮我看看C++标准中有没有描述在这种情况下将被称为构造函数或赋值运算符的定义:#includeusingnamespacestd;classCTest{public:CTest():m_nTest(0){cout还是仅仅是编译器优化的问题? 最佳答案 在这种情况下,默认构造函数始终采用int调用。这称为隐式转换,在语义上等同于以下代码:CTestb(5);赋值运算符从不在初始化中调用。考虑以下情况:CTestb=CTest(5);在这里,我们显式调用构造函数(采用int),然后将结果分配给b。但是再一次,从未调用任何赋值运算符。

C++ STL vector 不接受复制构造函数

我写了一个有vector的代码(c++,visualstudio2010),即使我声明了复制常量,但仍然显示没有声明复制常量这里是代码#include#includeusingnamespacestd;classA{public:A(){coutnothing;nothing.push_back(a);intn;cin>>n;}我得到的错误是Error1errorC2558:class'A':nocopyconstructoravailableorcopyconstructorisdeclared'explicit'c:\programfiles\microsoftvisualstud

c++ - 为什么这里需要一个拷贝构造函数?

考虑以下代码:structS{S(){}voidf();private:S(constS&);};intmain(){boolsome_condition;Smy_other_S;(some_condition?S():my_other_S).f();return0;}gcc编译失败,说:test.cpp:Infunction'intmain()':test.cpp:6:5:error:'S::S(constS&)'isprivatetest.cpp:13:29:error:withinthiscontext我不明白为什么应该在该行上进行复制构造-目的是简单地在默认构造的S实例上调用f

C++ 复制构造函数失败

我查看了作为问题建议的各种选项,Stackoverflow认为这些选项可能已经有了答案,但我所看到的没有一个接近。示例代码:#includeclassv2{public:floatx;floaty;v2(floatangle):x(cos(angle)),y(sin(angle)){}v2(constv2&v):x(v.x),y(v.y){}};intmain(intargc,char**argv){floatconstangle(1.0f);v2consttest1(angle);v2consttest2(v2(angle));v2consttest3(test1);floatcon

c++ - 基类复制构造函数的可见性问题

我有一个类(暂时称它为base),它有一个protected接口(interface),包括protected构造函数等。base的一些功能|返回base的一个实例按值(value):classbase{protected:base(){}base(baseconst&other){}//line6basefoo(){baseret;returnret;}};这些函数被包装在派生类中以返回派生类型,如下所示:classderived:publicbase{private:derived(baseconst&b):base(b){}public:derived():base(){}der

c++ - QFile::copy() 的进度条?

我正在制作一个在Qt中复制文件的程序。我想知道如何将QProgressBar与boolQFile::copy(constQString&fileName,constQString&newName)一起使用。这甚至可以通过copy函数实现吗?可以暂停复制过程吗? 最佳答案 你不能使用静态QFile::copy()方法来做到这一点。正如Maciej所说,您需要编写自己的类(class)。它应该使用两个QFile对象,一个用于读取,一个用于写入。分部分传输数据(例如整个文件大小的1%)并在每个部分后发出进度信号。您可以将此信号连接到进度对

c++ - C c;之间有什么区别吗?和 C c = C();?

#includeusingnamespacestd;classC{private:intvalue;public:C(){value=0;cout输出:默认构造函数默认构造函数问题:对于Cc1;显然会调用默认构造函数,对于Cc2=C();我以为会调用默认构造函数来初始化一个临时对象,然后复制构造函数将调用初始化c2,看来我错了。为什么? 最佳答案 这是一个复制省略的例子——基本上允许编译器优化掉复制。此处描述:http://en.cppreference.com/w/cpp/language/copy_elision

c++ - 委托(delegate)复制构造函数和常量数据初始化

我有一个类A,它有很多数据成员,其中一些是常量。所有数据成员都有适当的复制构造函数,所以我想为我的类默认一个复制构造函数:classA{public:A():a(1){}A(constA&op)=default;private://...Lotsofconstantandnon-constantmemberdata...constinta;};然后,我想编写一个构造函数,它接受对A的引用和一个应该初始化常量数据成员之一的值:A(constA&op,constinta_);这里op应该被复制,而a应该在之后用a_初始化或者不是复制。我想通过委托(delegate)给复制构造函数来避免手动

c++ - 为什么 std::is_copy_constructible 的行为不如预期?

#includeintmain(){std::is_constructible_v;//false,asexpected.std::is_copy_constructible_v;//true,NOTasexpected!}根据cppref:IfTisanobjectorreferencetypeandthevariabledefinitionTobj(std::declval()...);iswell-formed,providesthememberconstantvalueequaltotrue.Inallothercases,valueisfalse.std::is_copy_c

c++ - 永远不会调用具有默认参数的复制构造函数

为什么下面程序的输出只是int3而不是int3&4?#includeclassB{public:explicitB(inti){std::cout命令:clang++test.cpp-O0编译器:Appleclang3.0版(tags/Apple/clang-211.12)(基于LLVM3.0svn) 最佳答案 看起来您可能发现了一个编译器怪癖:)如果您将编译器版本更改为LLVM3.0以外的任何版本,则输出为int3&4。这在LLVm3.0上打印了int3&4,所以它似乎与B(3)是一个临时对象这一事实有关:classB{publi