某日二师兄参加XXX科技公司的C++工程师开发岗位第29面:

struct Foo
{
  Foo(int v):val(i){}	//构造函数
private:
  int val;
};
struct Foo
{
private:
  int val;
};	//此时默认构造函数会被创建
class Foo
{
public:
    Foo(int i, long l):ival_(i),lval_(l){}	//初始值列表
private:
    int ival_;
    long lval_;
};
Foo(int i, long l)
{
    ival_ = i;
    lval_ = l;
}
class Foo
{
public:
    Foo(int i):jval_(i),ival_(jval_){}	//未定义的行为,因为ival先被初始化,这时候jval是未定义的
private:
    int ival_;
    int jval_;
};
class Foo
{
public:
    Foo(int i, long l):ival_(i),lval_(l){}
    Foo(int i):Foo(i,0){}   //委托给Foo(int i, long l)
private:
    int ival_;
    long lval_;
};
struct Foo{ int a;}
struct Goo
{
    int b;
    Foo f;
};	
Goo g;	//此g.b是默认初始化,值不确定。Foo中的a也是默认初始化,所以g.f.a的值也是不确定的。
class Singleton
{
public:
    static Singleton& Instance()
    {
        static Singleton instance;
        return instance;
    }
    Singleton(const Singleton&) = delete;
    Singleton(Singleton&&) = delete;
    Singleton& operator=(const Singleton&) = delete;
    Singleton& operator=(Singleton&&) = delete;
private:
    Singleton() = default;
    ~Singleton() = default;
};

Singleton s; //编译失败
Singleton& s = Singleton::Instance();	//编译成功

C++类的构造函数的基本考点都在这里了,小伙伴本要理解这些设计及设计背后的取舍,面对面试官的拷问才能对答如流哦。

好了,今天的面试到这里就结束了,让我们期待明天面试官和二师兄的表现吧~

06-30 06:51