对象构造:默认参数vs委托

Abh*_*yal 2 c++ constructor c++11 c++14

考虑以下代码,我正在尝试引入默认构造函数以及参数化构造函数class A.这种方式是在最近的c ++改进中引入的.

class A  {
    private:
        unsigned int count;

    public:
        A(int new_c) : count(new_c) {}
        A() : A(10) {}
};
Run Code Online (Sandbox Code Playgroud)

vs在参数化构造函数上设置默认参数并完全忽略默认构造函数的旧方法.

class A  {
    private:
        unsigned int count;

    public:
        A(int new_c = 5) : count(new_c) {}
};
Run Code Online (Sandbox Code Playgroud)

除了遵循现代惯例之外,使用第一种方法比第二种方法有什么优势吗?

Cor*_*mer 6

功能上没有区别.知道甚至有另一个选项可用于非静态成员初始化(从C++ 11开始):

class A  {
    private:
        unsigned int count = 10;

    public:
        A() = default;
        A(int new_c) : count(new_c) {}
};
Run Code Online (Sandbox Code Playgroud)


Hco*_*org 5

在你的例子中没有任何优势(我甚至在这样的例子中更明确地选择第二个选项)

委托构造函数添加,以便在默认值不足时轻松工作.

例如

struct Point3d
{
   Point3d(int x, int y, int z);
   Point3d(Point2d p) : Point3d(p.x, p.y, 0) {}
}
Run Code Online (Sandbox Code Playgroud)