草庐IT

copy-constructor

全部标签

c++ - 使用 std::copy 复制所有元素的地址

我正在尝试获取给定集合的所有元素的地址并将它们复制到std::set。基本上,而不是std::sets1;std::copy(first1,last1,std::inserter(s1,s1.begin()));我想插入他们的地址。像这样的东西:std::set>s1;std::copy(reference_iterator(first1),reference_iterator(last1),std::inserter(s1,s1.begin()));在这里,reference_iterator将是一个迭代器,返回其元素的地址,而不是元素,这与boostindirect_iterato

c++ - 在 copy-and-swap 习语中实现交换

正在关注Whatisthecopyandswapidiom和Howtoprovideaswapfunctionformyclass,我尝试像后者接受的答案选项2那样实现交换函数(具有调用成员函数的自由函数),而不是前一个链接中的直接友好自由函数。但是下面的不编译#include//Uncommentingthefollowingtwolineswon'tchangethestateofaffairs//classBar;//voidswap(Bar&,Bar&);classBar{public:Bar(unsignedintbottles=0):bottles(bottles){enf

c++ - 带有受歧视 union 和可选<>的奇怪段错误

我想知道在这个使用std::experimental::optional和union类型的简单示例中,是什么导致了段错误。奇怪的是,段错误在clang和gcc中都发生了,但是发生在两个不同的地方。我也对从下面的日志中看到的大量复制和破坏感到困惑,想知道是否有更好/惯用的方法来避免这么多明显冗余的操作?在这种情况下,假设这里的所有对象都是按值传递和访问的,是否有助于将所有构造函数切换为采用右值引用并在所有地方使用std::move?#include#include//https://github.com/akrzemi1/Optional#include"Optional/optiona

C++ 引用可以赋值吗?

我一直在处理包装在容器类中的引用。为什么以下代码是合法的并且看起来行为正确?#includeclassFoo{public:Foo(inti):i_(i){}inti_;};classFooWrapper{public:FooWrapper(Foo&foo):foo_(foo){}Foo&foo_;};intmain(intargc,char*argv[]){Foofoo(42);FooWrapperfw(foo);FooWrapperfw2=fw;std::cout在没有显式operator=的情况下,我相信C++会进行成员复制。因此,当我执行FooWrapperfw2=fw;时,这

c++ - 在 Constructor works 中将临时变量传递给引用 arg。但不是一般的功能。为什么?

这个问题在这里已经有了答案:Defaultconstructorwithemptybrackets(9个回答)关闭7年前。考虑以下代码。在这里,即使构造函数是A(B&b),Aa(B())也会编译;但是print(B())不起作用。但是print也被声明为print(B&b);为什么会出现这种不一致?#includeusingnamespacestd;classB{public:charb;};classA{public:Bb;A(B&b);A(){}};A::A(B&b){this->b=b;}voidprint(B&b){}intmain(){print(B());Aa(B());}

C++ 构造函数调用和对象创建

classTest{public:intx;Test(){x=0;cout输出:程序编译输出constructorwithsingleintargumentcalledconstructorwithsingleintargumentcalled但是现在classTest{public:intx;Test(){x=0;cout编译失败。constructorinvokings.cc:36:7:error:noviableconstructorcopyingvariableoftype'Test'Testaa=10;^~~constructorinvokings.cc:23:3:note:

C++ 模板复制构造函数,编译器说 "passing const as this argument discards qualifiers"

我正在尝试创建动态矩阵的模板类。凭借我目前对C++的了解,我设法解决了一些问题,但我被复制构造函数和重载operator=;困住了。换句话说,我无法创建对象的拷贝。在我看来这应该可行,但我的编译器friend告诉我有1个错误:错误:将“constMatrix”作为“intMatrix::getElement(int,int)[withT=int]”的“this”参数传递会丢弃此行的限定符[-fpermissive]:m[i][j]=original.getElement(i,j);当我想创建一个对象时:Matrixm=Matrix(3,3);我的模板类在这里:templateclass

c++ - 编译器优化还是我的误区

最近我在测试一些C++的深暗角落,我对一个微妙的地方感到困惑。我的测试其实很简单://problem1//noanyconstructorcall,g++actsasafunctiondeclarationtothe(howmany())//g++turns(howmany())into(howmany(*)())howmanyt(howmany());//problem2//onlyoneconstructorcallhowmanyt=howmany();我对上面的期望是;第一个howmany()构造函数调用将生成一个临时对象,然后编译器将使用该临时对象和复制构造函数来实例化t。然而

c++ - 为什么复制构造函数被调用,即使我实际上正在复制到 C++ 中已经创建的对象?

我写了下面的代码,但我不明白为什么要调用复制构造函数。#includeusingnamespacestd;classabc{public:abc(){cout当我运行这个程序时,我得到以下输出inConstrucutor0xbff0e6feinConstrucutor0x804a100incopyconstructor0xbff0e6ffincopyconstructorsrc0x804a100inoperator=0xbff0e6feinoperator=src0xbff0e6ffinDestrucutor0xbff0e6ffOK.IgothereinDestrucutor0xbff

c++ - 奇怪的构造函数行为

#includeusingnamespacestd;classFoo{public:Foo(){cout我不明白为什么函数“someFunction”调用第二个构造函数。我认为它只会调用第一个构造函数,不带参数,并显示0。也许我遗漏了一些明显的东西...... 最佳答案 第二个构造函数是复制构造函数,当您按值将参数传递给函数时,它会被复制,从而调用复制构造函数。第一个构造函数(默认构造函数)仅在从头开始创建对象时调用,并且不带任何参数。 关于c++-奇怪的构造函数行为,我们在StackO