如果我有一个类A,我写A(5);,它显然是一个临时变量.
但是不清楚是否A(5);是构造函数调用(使用5as参数),或者如果这是一个函数样式转换,转换5为A.有人可以向我解释一下吗?
这是一个函数式类型转换它创建了一个t从int通过调用构造函数.无法在C++中显式调用构造函数.
这在[expr.type.conv](N3337)中描述:
5.2.3显式类型转换(功能表示法)
1)简单类型指定符(7.1.6.2)或类型名称指定符(14.6)后跟带括号的表达式列表,在给定表达式列表的情况下构造指定类型的值.如果表达式列表是单个表达式,则类型转换表达式与相应的强制转换表达式(5.4)等效(在定义中,如果在含义中定义).如果指定的类型是类类型,则类类型应完整.如果表达式列表指定了多个单独的值,则该类型应该是具有适当声明的构造函数的类(8.5,12.1),并且该表达式对于某些发明的临时变量
T(x1, x2, ...)的声明T t(x1, x2, ...);有效t,结果为值的t作为prvalue.
由于t是一个简单类型说明符,这相当于相应的强制转换表达式.这允许执行等价的a static_cast([expr.cast]/4),它定义了转换的最终结果:
[expr.static.cast]/4:否则,对于某些发明的临时变量(8.5),如果声明格式正确,则e可以T使用static_cast表单的表达式将表达式显式转换为类型.这种显式转换的效果与执行声明和初始化,然后使用临时变量作为转换结果相同.当且仅当初始化将其用作glvalue时,该表达式才用作glvalue.static_cast<T>(e)T t(e);te
| 归档时间: |
|
| 查看次数: |
1050 次 |
| 最近记录: |