函数样式转换与调用构造函数

时间:2016-05-16 13:33:06

标签: c++ casting

如果我有一个班级compile 'com.google.android.gms:play-services:8.4.0',并且我写了A,那么它显然是一个临时变量。

但是,A(5);是构造函数调用(使用A(5);作为参数)还不清楚,或者如果这是一个函数样式转换,则将5强制转换为5 。有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:8)

它是一种功能样式类型转换,它通过调用构造函数从t创建int。没有办法在C ++中显式调用构造函数。

[expr.type.conv](N3337):

中对此进行了描述
  

5.2.3显式类型转换(功能表示法)

     

1)一个简单类型指定器(7.1.6.2)或typename-specifer(14.6),后跟一个带括号的表达式列表   给定表达式列表构造指定类型的值。如果表达式列表是单个表达式,   类型转换表达式是相应的(在定义中,如果在意义上定义)   演员表达(5.4)。如果指定的类型是类类型,则类类型应完整。如果表达   list指定多个值,该类型应为具有适当声明的构造函数的类(8.5,12.1),   对于某些发明的临时变量T(x1, x2, ...),表达式T t(x1, x2, ...);与声明t的效果相同,结果是t作为prvalue的值。

由于t简单类型说明符,因此这相当于相应的强制转换表达式。这允许执行相当于static_cast[expr.cast]/4)的定义,它定义了转换的最终结果:

  

[expr.static.cast]/4:否则,如果声明{{1},则可以使用e形式的T将表达式static_cast显式转换为static_cast<T>(e)类型对于一些发明的临时变量T t(e);(8.5),它是格式良好的。该   这种显式转换的效果与执行声明和初始化相同   使用临时变量作为转换的结果。如果和,表达式t用作glvalue   只有初始化将它用作glvalue。