默认构造函数参数
Default constructor parameters
#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()
保留参数,编译器将使用默认值。仅此而已。
相关文章:
- C++:使用运算符 = 调用多参数构造函数
- 通过零参数构造函数创建的 glm::mat4 应该包含哪些值?
- 好奇的混合与可变参数构造函数
- 具有默认值的单个参数构造函数是否与默认构造函数相同?
- 为什么我们需要创建一个单参数构造函数来使用临时的无名称对象
- 在可变参数构造函数中初始化常量数组
- C++ 显式多参数构造函数歧义
- 零一参数构造函数
- 可变参数构造函数中的 SFINAE
- 当没有显式关键字与单参数构造函数一起使用时,编译器可以发出警告
- 可变参数类模板和可变参数构造函数
- 确保模板参数类型与其可变参数构造函数的类型匹配
- C++默认参数构造函数与内联初始化优先级
- 如何在 c++ 中将包含复制构造函数的类的参数构造函数称为私有?
- 自动存储中没有无参数构造函数的类对象和异常
- 警告:用两个参数构造函数返回对象时,表达结果未使用
- 如何在C++中调用无参数构造函数
- 在 c++ 中具有多个参数构造函数的模板类存在问题
- 可变参数构造函数优先于用户提供的移动构造函数,除非默认
- 如何从可变参数构造函数参数构造任何对象?