默认构造函数参数

时间:2013-02-01 12:14:27

标签: c++ class

#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);

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

3 个答案:

答案 0 :(得分:6)

传递的值只会将参数的默认值替换为传递的值。

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

答案 1 :(得分:4)

那些不是“硬编码”,只是默认参数。如果您不提供参数,则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

答案 2 :(得分:1)

声明

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

不定义“硬编码参数”,而是默认值。如果您调用A::A()离开参数,编译器将使用默认值。这就是它的全部内容。