聚合结构构造函数

时间:2019-06-17 06:01:28

标签: c++ c++11 initialization structure

我有以下代码:

#include <iostream>
using namespace std;

struct Point {
    double x,y;
    Point(double x=0, double y=0): x(x), y(y) {}
};

struct Triangle {
    Point A,B,C;
    Triangle(Point A=Point(), Point B=Point(), Point C=Point()): A(A), B(B), C(C) {}
    void output()
    {
        cout<<"A: "<<A.x<<";"<<A.y<<endl;
        cout<<"B: "<<B.x<<";"<<B.y<<endl;
        cout<<"C: "<<C.x<<";"<<C.y<<endl;
    }
};

int main() {
    Triangle t;
    t.output();
    return 0;
}

一切正常。我的问题是关于带有默认参数的Triangle构造函数。通过调用像Point这样的Point A=Point()构造函数(就效率和简洁代码而言),这是初始化成员的正确方法吗?

2 个答案:

答案 0 :(得分:2)

  

这是通过调用Point构造函数(如Point A = Point())来初始化成员的正确方法吗(就效率和简洁代码而言)?

是正确的。

您不能只用一种方法来谈论效率。您需要提出第二种方法,然后比较它们的效率。

就清洁度而言,我认为最好使用不同于成员变量的函数参数名称。

使用时编译器将创建正确的代码

Triangle(Point A=Point(), Point B=Point(), Point C=Point()): A(A), B(B), C(C) {}

但使用起来更容易阅读

Triangle(Point inA = Point(), Point inB = Point(), Point inC = Point()): A(inA), B(inB), C(inC) {}

答案 1 :(得分:2)

就代码清洁度而言,我宁愿提出两个构造函数:

Triangle(Point inA, Point inB, Point inC): A(inA), B(inB), C(inC) {}
Triangle() : Triangle(Point(), Point(), Point()) {}