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 になり、さらに 100 になりますinit_val。指定したパラメータは、デフォルトを上書きしますしたがって:

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 に答える