【问题标题】:c++ default parameter uses other parameterc++默认参数使用其他参数
【发布时间】:2020-06-06 10:06:42
【问题描述】:

除了重载构造函数以便其中一个接受额外参数之外,有没有办法调整默认参数以便我可以访问另一个参数的成员?

#include <iostream>
#include <vector>
template <typename T>
class ArrayList {
public:
    int size = 0;
    int capacity = 0;
    T* array;

    ArrayList(int capacity = 1) : capacity(capacity) {
        array = new T[capacity];
    }
    ArrayList(std::vector<T>& vec, int capacity = vec.size()) {
        size = (capacity = vec.size());
        array = new T[capacity];
        for (int i = 0; i < size; i++) array[i] = vec[i];
    }
};

这里我试图将容量的值设置为向量的大小(如果未指定)。

【问题讨论】:

  • 这个例子对我来说有点不清楚,尤其是size = (capacity = vec.size()):这里你无论如何都要覆盖capacity,所以即使其余的都是正确的,参数值也永远不会被使用。
  • ArrayList(std::vector&lt;T&gt;&amp; vec) : ArrayList(vec, vec.size()) {}
  • 是的,如果容量没有默认值,这就是我的代码的外观。
  • 但是这样我的容量值被限制为 vec.size() ?

标签: c++ parameters constructor


【解决方案1】:

那么你就不需要这个参数了

int capacity = vec.size()

为什么你不初始化构造函数体中的容量?

ArrayList(std::vector<T>& vec)
{
    capacity = vec.size()
    ...
}

【讨论】:

  • 因为我不一定希望容量的值等于 vec.size()
  • 好吧,如果该变量取决于条件,则将其用作参数... :)
猜你喜欢
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 2015-04-21
  • 1970-01-01
相关资源
最近更新 更多