默认构造函数的模板参数与 C++ 中的类的模板参数有何不同?

问题描述 投票:0回答:1

在阅读

gcc
源代码中std::pair的实现时,我发现其中一个默认构造函数如下:

  template<typename _T1, typename _T2>
    struct pair
    : public __pair_base<_T1, _T2>
    {
      typedef _T1 first_type;    ///< The type of the `first` member
      typedef _T2 second_type;   ///< The type of the `second` member

      _T1 first;                 ///< The first member
      _T2 second; 
...
      template <typename _U1 = _T1,
                typename _U2 = _T2,
                typename enable_if<__and_<
                                     __is_implicitly_default_constructible<_U1>,
                                     __is_implicitly_default_constructible<_U2>>
                                   ::value, bool>::type = true>
      constexpr pair()
      : first(), second() { }
...
}

我的问题是,当使用默认的ctor构造对象时,也是实例化该类的对象的时候,如下所示:

std::pair<int, double> p;

_U1
_T1
有什么不同?谢谢你们。

c++ templates
1个回答
0
投票

不能。通过将构造函数模板参数

_U1
_U2
默认为类模板参数
_T1
_T2
,第三个(未命名)非类型模板参数存在替换失败的可能性。

这是当

_T1
_T2
不可隐式默认构造时,重载不可用的机制。

© www.soinside.com 2019 - 2024. All rights reserved.