C ++中的构造函数调用或函数样式转换

时间:2011-11-27 23:27:40

标签: c++

如果我有以下c ++代码:

class foo{
public:
    explicit foo(int i){};
};
void f(const foo &o){
}

然后我打电话给

f(foo(1));

foo(1)构造函数调用还是函数样式转换?

3 个答案:

答案 0 :(得分:4)

他们是一回事。

答案 1 :(得分:4)

这是一个函数式转换,导致构造函数调用,所以两者都是。

答案 2 :(得分:4)

  

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

     

1 简单类型说明符(7.1.6.2)或 typename-specifier (14.6)   后跟带括号的表达式列表构造值   给定表达式列表的指定类型。如果是表达式列表   是单个表达式,类型转换表达式是等价的   (在定义中,如果在意义上定义)到相应的演员表   表达(5.4)。 ...

您的代码使用您具有参数值1的构造函数创建一个临时代码,并将其绑定到const引用。临时生命周期在创建它的语句结束时结束。