标签: default-constructor

这三个默认构造函数在 C++ 中等效吗?

考虑以下代码:

#include <type_traits>

template<typename T>
struct A1 {
    T t;

    // implicitly-declared default constructor
};

template<typename T>
struct A2 {
    T t;

    // explicitly-declared default constructor without noexcept
    A2() = default;
};

template<typename T>
struct A3 {
    T t;

    // explicitly-declared default constructor with noexcept
    A3() noexcept(std::is_nothrow_default_constructible<T>::value) = default;
};
Run Code Online (Sandbox Code Playgroud)

这三个默认构造函数在 C++ 中等效吗?

c++ standards class default-constructor noexcept

1
推荐指数
2
解决办法
148
查看次数

C++标准列表和默认构造类型

为什么单个参数构造函数std::list<T>需要T是一个默认可构造类型?我的意思是以下代码无法编译.

struct Foo { // does not have default constructor.
  Foo (int i) {} 
}
int main(void) {
  std::list<Foo> l(10);
}
Run Code Online (Sandbox Code Playgroud)

似乎可以使用构造并销毁习惯用法,因为它们已经在std :: vector中完成了,尽管有更多的书籍保持列表类.

在相关的说明中,为什么没有列表中的容量功能?您可以争辩说,这样的函数会预先支付内存分配成本,并在您push_back反对时消除开销.至少它会使两个STL序列容器的接口稍微更一致.

c++ stl list default-constructor

0
推荐指数
2
解决办法
3136
查看次数

在java中使用默认的构造函数,即使存在参数化构造函数也是如此

我只想在这里清除我的概念,所以我要问......

如果我为我的类定义一个显式的参数化构造函数,我是否仍然可以调用java编译器提供的默认构造函数(默认情况下为每个类提供)?

或者它是否导致在这种情况下导致编译时错误?请解释一下编译器调用的确切情况!

java constructor default-constructor

0
推荐指数
1
解决办法
7542
查看次数

Java默认构造函数问题 - 什么实际构成'默认构造函数'?

可能重复:
Java默认构造函数

我正在研究Java实践问题,并且遇到了这个问题:

鉴于:

class X {}

class Y {Y () {}}

class Z {z(int i ) {} }
Run Code Online (Sandbox Code Playgroud)

哪个类有默认构造函数?

A. X.

B.仅限Y.

C.仅限Z.

D. X和Y.

E. Y和Z.

F. X和Z.

G. X,Y和Z.

我会说正确的答案是A,因为类X是唯一没有任何明确定义的构造函数的类.我的同行说它会是G,因为构成默认构造函数的是你在构造函数体中实际更改值的时候.

我们已经完成了一些研究,当涉及到默认构造函数实际上是什么(在这个级别)时,答案似乎有所不同.

任何人都可以在这里提供答案和逻辑解释吗?非常感谢你.

java constructor default-constructor

0
推荐指数
1
解决办法
959
查看次数

这在C++构造函数中有什么作用?

我在教科书中看到了这一点,但这本书没有解释它实际上做了什么,以及为什么我应该这样做.这与本书中的示例类似:

 class MyClass
 {
      public:
           MyClass(int initial_capacity = 20);
      private:
           int capacity;
 }
Run Code Online (Sandbox Code Playgroud)

我不能initial_capacity在实现中使用,我甚至无法实现任何东西,所以我很困惑这是为了什么?是否以某种方式将容量设置为20?这是一个默认的构造函数?

c++ syntax constructor default-constructor

0
推荐指数
1
解决办法
723
查看次数

在Java中实例化对象时到底发生了什么?

我知道在创建类的对象时,构造函数会构建该对象.说我有这两个类:

class Vehicle {
    public int a = func();

    public int func() { 
        System.out.println("9"); 
        return 9;
    }
}

class Car extends Vehicle  {

    public static void main(String[] args) {
        Car c = new Car();
    }
} 
Run Code Online (Sandbox Code Playgroud)

该项目的输出为"9".但为什么会这样呢?调用Car构造函数时到底发生了什么?我知道有一些类型的默认构造函数,但我不确定它是如何工作的.

有谁可以用上面的例子解释我的对象构造?

java constructor default-constructor

0
推荐指数
1
解决办法
2156
查看次数

为什么这个构造函数是按原样编写的?

我们的教授在网上发布了一个自定义的"String"模板文件,并在不久前问我们填写下面的功能.我的问题是,为了尝试理解这一点,这就是为什么排名前三的构造函数Text = NULL;在其下面,以及它的this = source;其他形式.我觉得每个人都应该说Text = the_input_parameter.

非常感谢,这是代码:

class String
{
public:
    // Default constructor
    String()
    {
        Text = NULL;
    }
    String(const String& source)
    {
        Text = NULL;
        // Call the assignment operator to perform deep copy
        *this = source;     
    }
    String(const char* text)
    {
        Text = NULL;
        // Call the assignment operator to perform deep copy

        *this = text;

    }
~String()
    {
        delete[] Text;
    }

    // Assignment operator to perform deep copy
    String& …
Run Code Online (Sandbox Code Playgroud)

c++ object c-strings copy-constructor default-constructor

0
推荐指数
1
解决办法
126
查看次数

C++中的递归构造函数

我构建了一个包含没有默认构造函数的向量的类.特别:

template<typename T>
struct MyVector
{
public:
  int GetN(void)
  {
    return n;
  }
  MyVector(int n1)
  {
    n=n1;
    ListElt = new T[n1];
  }
  ~MyVector()
  {
    delete [] ListElt;
  }
  // some other irrelevant to the question code
private:
  int n;
  T *ListElt;
};
Run Code Online (Sandbox Code Playgroud)

现在我想构建一个派生自它的类,它包含一个整数和一个向量.有效的代码如下:

struct EquivInfo {
public:
  EquivInfo(int inpOrbit, MyVector<int> &inpMat)
  {
    iOrbit=inpOrbit;
    eVect=new MyVector<int>(inpMat.getN());
    // some code for copying the vector in place.
  }
  ~EquivInfo()
  {
    delete eVect;
  }
private:
  int iOrbit;
  MyVector<int> *eVect;
};
Run Code Online (Sandbox Code Playgroud)

有没有办法避免使用向量的指针?

问题是如果我删除指针然后调用MyVector()类型的构造函数.我不懂为什么.应该有一种方法可以让EquivInfo的构造函数为MyVector调用一个精确的构造 …

c++ constructor default-constructor

0
推荐指数
1
解决办法
2424
查看次数

Java是否创建了默认构造函数?

当我们有一个这样的类没有任何构造函数时:

public class F {
    public void sum() {
        System.out.println("print it");
    }
Run Code Online (Sandbox Code Playgroud)

main方法如何创建此类的对象?对象是否已经有构造函数?

    public static void main(String[] args) {
        F obj = new F();
        obj.sum();
    }
}
Run Code Online (Sandbox Code Playgroud)

Java是否有像这样的默认构造函数:

public class F() {
}
Run Code Online (Sandbox Code Playgroud)

java constructor default-constructor

0
推荐指数
1
解决办法
111
查看次数

具有默认值的单个参数构造函数是否与默认构造函数相同?

特别是在自动调用基类构造函数的上下文中:具有默认值的基类的单个参数构造函数是否与默认构造函数(不带参数的构造函数)以相同的方式(例如,如果未指定,则自动调用)?

struct base {
  base(int value = 42) {}
};
struct derived : public base {
  derived() {} // automatic call to base::base(int) ?
};
Run Code Online (Sandbox Code Playgroud)

编辑:以下与问题无关,这只是我如何想到的。以下代码甚至不显示我所看到的崩溃。请参阅下面的实际示例。

考虑一下:

#include <sstream>
// C++98, std::ostringstream(ios_base::openmode mode = ios_base::out) available
struct OhNo : public std::ostringstream {
  OhNo() {
  }
  void Crash() const {
    this->str();
  }
};
// later: OhNo f; f.Crash();
Run Code Online (Sandbox Code Playgroud)

std::ostringstream(在C ++ 11之前)没有无参构造函数。只有一个具有单个参数和默认值。 上面OhNo没有调用它的基类的构造函数。是的确实存在,如果没有可用的自变量构造函数,则会自动调用基类构造函数。

GCC 5.4.0可以很好地进行编译,但是以后会出现段错误(由于未初始化的基类,这是 另一个问题)。Clang 7.0.0也可以很好地编译,并且可以正常运行代码。

谁是对的?是否需要在此处手动调用基类构造函数? …

c++ default-constructor language-lawyer default-arguments c++98

0
推荐指数
1
解决办法
95
查看次数