内置类型的模板参数默认值

Template argument default value for built-in types

本文关键字:参数 默认值 置类型 内置      更新时间:2023-10-16

考虑这个函数:

template <typename T>
T foo(const T& var = T()) {
  return var;
}

这个调用显然是安全的:

foo<std::string>()
那些是

?

foo<int>()
foo<bool>()
...

是的,他们很好。形式为T()的表达式创建类型为T的对象并对其进行值初始化。对intbool进行值初始化与对其进行零初始化相同。也就是说,参数var的值为0。

表达式T(),其中T是一个简单类型说明符类型说明符用于非数组完整对象类型[…]]创建指定类型的右值,其值是通过值初始化(8.5)类型的T

对象产生的值。

值初始化定义为:

T类型的对象进行值初始化意味着:

  • 如果T是(可能是cv合格的)类类型[…]

  • 如果T是(可能是cv限定的)非联合类类型[…]

  • 如果T是数组类型,[…]

  • ,否则为零初始化。

零初始化定义为:

T类型的对象或引用进行零初始化意味着:

  • 如果T是标量类型(3.9),则对象设为值0(0),作为整型常量表达式,转换为T;

  • […]

T()创建的临时对象然后绑定到const引用,从而延长其生存期。

在两种上下文中,临时变量在与完整表达式末尾不同的位置被销毁。[…第二个上下文是当引用绑定到临时对象时。