#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);
真的发生了什么?这是我第一次在构造函数中看到硬编码参数!
答案 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()
离开参数,编译器将使用默认值。这就是它的全部内容。