相关疑难解决方法(0)

什么是三法则?

  • 什么是抄袭的对象是什么意思?
  • 什么是复制构造函数复制赋值运算符
  • 我什么时候需要自己申报?
  • 如何防止复制对象?

c++ c++-faq copy-constructor assignment-operator rule-of-three

2067
推荐指数
8
解决办法
27万
查看次数

类"函数声明"后"默认"是什么意思?

我见过default在类中的函数声明旁边使用过.它有什么作用?

class C {
  C(const C&) = default;
  C(C&&) = default;
  C& operator=(const C&) & = default;
  C& operator=(C&&) & = default;
  virtual ~C() { }
};
Run Code Online (Sandbox Code Playgroud)

c++ default declaration keyword c++11

202
推荐指数
4
解决办法
8万
查看次数

编译器为类创建的所有成员函数是什么?这会一直发生吗?

编译器为类创建的所有成员函数是什么?这会一直发生吗?像析构函数.我担心的是它是否为所有类创建,为什么需要默认构造函数?

c++ c++-faq member-functions

58
推荐指数
1
解决办法
3万
查看次数

默认复制构造函数

可以为已经有用户定义的构造函数但不是复制构造函数调用(隐式)默认 复制构造函数吗?

如果可能的话,假设我们明确定义了类的复制构造函数,现在可以调用(隐式)默认构造函数吗?

c++ constructor default copy copy-constructor

33
推荐指数
2
解决办法
7万
查看次数

移动构造函数是自动生成的吗?

我有一个大班,拿着很多STL容器.
编译器会自动创建一个移动构造函数来将这些容器移动到目标,还是我必须自己创建?

c++ move-constructor c++11

32
推荐指数
1
解决办法
8750
查看次数

编译器不会定义implicits的条件(构造函数,析构函数,复制构造函数,复制赋值)

这应该是一个微不足道的问题,但我无法在stackoverflow上明确找到它.

如果用户不提供,将隐式定义以下内容.

  1. default(无参数)构造函数
  2. 复制构造函数
  3. 复制赋值运算符
  4. 析构函数

但是我已经读过某个地方(我现在似乎无法找到),有些情况下编译器不会隐式实现它们.

这些条件是什么?

c++ default-constructor implicits

29
推荐指数
1
解决办法
6720
查看次数

c ++接口必须遵守五条规则吗?

在定义接口类时声明实例化方法的正确方法是什么?

出于显而易见的原因,抽象基类需要具有虚拟析构函数.但是,然后给出以下编译警告:"'InterfaceClass'定义了一个非默认的析构函数,但没有定义复制构造函数,复制赋值运算符,移动构造函数或移动赋值运算符",这是"五的规则" ".

我理解为什么一般应该遵守"五规则",但是它仍适用于抽象基类或接口吗?

那么我的意思是:

class InterfaceClass
{
    //  == INSTANTIATION ==
  protected:
    //  -- Constructors --
    InterfaceClass()                      = default;
    InterfaceClass(const InterfaceClass&) = default;
    InterfaceClass(InterfaceClass&&)      = default;

  public:
    //  -- Destructors --
    virtual ~InterfaceClass() = 0;


    //  == OPERATORS ==
  protected:
    //  -- Assignment --
    InterfaceClass& operator=(const InterfaceClass&) = default;
    InterfaceClass& operator=(InterfaceClass&&)      = default;


    //  == METHODS ==
  public:
    // Some pure interface methods here...
};



//  == INSTANTIATION ==
//  -- Destructors --
InterfaceClass::~InterfaceClass()
{
}
Run Code Online (Sandbox Code Playgroud)

它是否正确?这些方法应该= delete …

c++ abstract-class rule-of-three virtual-destructor c++17

14
推荐指数
2
解决办法
841
查看次数

编译生成的构造函数

这只是一个快速的问题,可以正确理解当您使用如下构造函数创建类时会发生什么:

class A
{
  public:
    A() {}
};
Run Code Online (Sandbox Code Playgroud)

我知道没有生成默认构造函数,因为它已经定义,但是由编译器生成的复制和赋值构造函数,或者换句话说,我是否需要声明私有复制构造函数和私有赋值运算符以防止这种情况发生?

class A
{
  private:
    // needed to prevent automatic generation?
    A( const A& );
    A& operator=( const A& );
  public:
    A() {}
};
Run Code Online (Sandbox Code Playgroud)

c++ copy-constructor default-constructor assignment-operator

11
推荐指数
2
解决办法
7639
查看次数

为什么删除移动构造函数导致向量停止工作

如果我在类中禁止移动构造函数,我就不能再在向量中使用它:

class Foo
{
  public:
      Foo(int i) : i_(i) {}
      Foo(Foo&&) = delete;

      int i_;
};

int main()
{
    std::vector<Foo> foo;
    foo.push_back(Foo(1));
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

c++ c++11

10
推荐指数
1
解决办法
3801
查看次数

sort()是否自动使用移动语义?

isocpp.org指出:

基于移动的std :: sort()和std :: set :: insert()的测量速度比基于复制的版本快15倍[...]如果你的类型有移动操作,你会自动获得性能优势来自标准算法.

这是否意味着如果调用sort()没有移动构造函数或移动赋值运算符的用户定义类型,那么是否使用了移动语义?换句话说,为了获得C++ 11性能改进的诸多好处,您应该编辑现有代码以显式添加移动操作?

此外,如果要进行排序,是容器还是容器内的类型,或两者都必须定义移动操作?

c++ sorting move-semantics c++11

5
推荐指数
1
解决办法
692
查看次数