如果我有一个班级compile 'com.google.android.gms:play-services:8.4.0'
,并且我写了A
,那么它显然是一个临时变量。
但是,A(5);
是构造函数调用(使用A(5);
作为参数)还不清楚,或者如果这是一个函数样式转换,则将5
强制转换为5
。有人可以向我解释一下吗?
答案 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。