如果我有以下c ++代码:
class foo{
public:
explicit foo(int i){};
};
void f(const foo &o){
}
然后我打电话给
f(foo(1));
是foo(1)
构造函数调用还是函数样式转换?
答案 0 :(得分:4)
他们是一回事。
答案 1 :(得分:4)
这是一个函数式转换,导致构造函数调用,所以两者都是。
答案 2 :(得分:4)
5.2.3显式类型转换(功能表示法)
1 简单类型说明符(7.1.6.2)或 typename-specifier (14.6) 后跟带括号的表达式列表构造值 给定表达式列表的指定类型。如果是表达式列表 是单个表达式,类型转换表达式是等价的 (在定义中,如果在意义上定义)到相应的演员表 表达(5.4)。 ...
您的代码使用您具有参数值1的构造函数创建一个临时代码,并将其绑定到const引用。临时生命周期在创建它的语句结束时结束。