函数调用期间的C ++构造函数

时间:2018-01-31 17:22:10

标签: c++ constructor function-call

在C ++中,当您有一个按值传递给函数的对象时,将调用复制构造函数。比如在这个函数签名中:

void foo(Object o);

几年前有人告诉我你可以传递适合作为函数参数的对象的构造函数的参数。因此,使用上面的函数签名foo,让我们说Object具有构造函数:

Object(int a, int b);

我们可以像这样调用函数foo:

foo(1,2);

我还没有找到任何有关此事的信息,我认为我误解了我多年前所听到的或者说这个人错了。有没有办法做到这一点,除了:

foo(Object(1,2));

如果没有,是否有理由在函数调用期间无法隐式调用此构造函数?

1 个答案:

答案 0 :(得分:4)

  

几年前有人告诉我你可以传递适合作为函数参数的对象的构造函数的参数。

如果你没记错的话,说错了。

鉴于您的功能和课程,您可能不会使用:

f(1, 2);

但是,您可以使用:

f({1, 2});

如果匹配,{...}将调用适当的构造函数。

作为个人喜好,我仍然会使用:

f(Object{1, 2});

IMO,使用Object{1, 2}时的意图比仅使用{1, 2}的意图更明确。