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

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

4

3 回答 3

6

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

  • 定义A a;将导致调用A::A(100, 100)
  • 定义A a(5);将导致调用A::A(5, 100)
  • 定义A a(5, 6);将导致调用A::A(5, 6)
于 2013-02-01T12:16:08.600 回答
4

这些不是“硬编码”的,只是默认参数。如果您不提供参数,则size默认为 100 和init_val100。您提供的参数覆盖默认值。因此:

A a1();            // size = 100, init_val = 100
A a2(1000);        // size = 1000, init_val = 100
A a3(1000, 1000);  // size = 1000, init_val = 1000
于 2013-02-01T12:15:29.823 回答
1

宣言

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

没有定义“硬编码参数”,而是默认值。如果您调用A::A()保留参数,编译器将使用默认值。这里的所有都是它的。

于 2013-02-01T12:17:13.477 回答