代码之家  ›  专栏  ›  技术社区  ›  Galaxy

在模板化类的构造函数中调用构造函数

  •  -1
  • Galaxy  · 技术社区  · 6 年前

    这段代码有一个模板类。默认构造函数似乎递归地调用自己。它怎么能做到?我不懂这个密码。也许如果给我一个没有模板的例子,只是POD类型,事情会更清楚。在C++编程之前,我还没有遇到过这个构造。我认为我不理解构造函数和模板。

    template <typename T>
    class Simple {
      public:
        Simple(T value = T());    // What's this?
        T value();
        void set_value(T value);
      private:
        T value_;
    };
    
    template<typename T>
    Simple<T>::Simple(T value) {
      value_ = value;
    }
    
    template<typename T>
    T Simple<T>::value() {
      return value_;
    }
    
    template<typename T>
    void Simple<T>::set_value(T value) {
      value_ = value;
    }
    

    我的问题是: 是什么 T value = T() 你知道吗?

    2 回复  |  直到 6 年前
        1
  •  0
  •   Seshadri VS    6 年前

    简单类有一个变量 value 类型 T

    Simple 对象。然后默认构造函数将value对象实例化为T的默认构造函数。

    Simple(T value = T()) 是一个默认构造函数,它将值实例化为类型化元素的默认构造函数。

    示例:- 如果T是字符串。

    Simple (String value = String()) 
    

    所以值现在被初始化为默认值String()。

        2
  •  0
  •   Jarod42    6 年前

    void foo(int i = 42); ,没有递归。

    foo(); 相当于 foo(42); .

    Simple(T value = T());

    Simple<int> s{}; 相当于 Simple<int> s{0}; Simple<std::string> s{}; 相当于 Simple<std::string> s{std::string{}};

    T() T ( int std::string