默认构造函数参数

Default constructor parameters

本文关键字:参数 构造函数 默认      更新时间:2023-10-16
#include <vector>
class A {
private:
    std::vector<int> v_;
public:
    A(int size = 100, int init_val = 100){
        for(int i=0; i<size; i++)
            v_.push_back(init_val);
    }
};

总的来说,如果我这样做:

A a(1000, 100);

到底发生了什么?这是我第一次在构造函数中看到硬编码参数!

传递的值将简单地将参数的默认值替换为传递的值。

  • 定义A a;将导致调用A::A(100, 100)
  • 定义A a(5);将导致调用A::A(5, 100)
  • 定义A a(5, 6);将导致调用A::A(5, 6)

这些不是"硬编码",只是默认参数。 如果未提供参数,则size默认为 100,init_val默认为 100。 您提供的参数将覆盖默认值。 因此:

A a1();            // size = 100, init_val = 100
A a2(1000);        // size = 1000, init_val = 100
A a3(1000, 1000);  // size = 1000, init_val = 1000

声明

A(int size = 100, int init_val = 100)

不定义"硬编码参数",而是定义默认值。如果调用A::A()保留参数,编译器将使用默认值。仅此而已。