const K&是什么? k = K()意味着在这个构造函数中?

时间:2017-09-20 19:48:02

标签: c++ binary-search-tree

我无法理解此代码片段的语法

" const K&的目的是什么? k = K(),const V& v = V()"?

template<typename K, typename V>
class Entry{

    public:
        typedef K Key;
        typedef V Value;
    public:
        Entry(const K& k = K(), const V& v = V()) : _key(k), _value(v) {}

    ....
        ....
            ....
    private:
        K _key;
        V _value;
};

谢谢

1 个答案:

答案 0 :(得分:1)

KV是模板参数,它们可以是Entry用户想要的任何数据类型。

kvEntry构造函数的输入参数。它们通过const引用传入,并且它们具有指定的默认值,其中K()默认构造类型为K的临时对象,而V()默认构造类型的临时对象V。如果用户在创建Entry对象实例时未提供显式输入值,则使用默认值。

例如:

Entry<int, int> e1(1, 2);
// K = int, k = 1
// V = int, v = 2

Entry<int, int> e2(1);
// aka Entry<int, int> e2(1, int())
// K = int, k = 1
// V = int, v = 0

Entry<int, int> e3;
// aka Entry<int, int> e3(int(), int())
// K = int, k = 0
// V = int, v = 0

Entry<std::string, std::string> e4("key", "value");
// K = std::string, k = "key"
// V = std::string, v = "value"

Entry<std::string, std::string> e5("key");
// aka Entry<std::string, std::string> e4("key", std::string())
// K = std::string, k = "key"
// V = std::string, v = ""

Entry<std::string, std::string> e6;
// aka Entry<std::string, std::string> e4(std::string(), std::string())
// K = std::string, k = ""
// V = std::string, v = ""